计算机计算数据的方式
我们知道计算机是有计算器演变过来的 , 对于计算机 , 它只实现了加法器 , 没有实现减法器, 对于减法的实现是通过 相加一个负数来计算的, 所以 引出了俩个 概念 正数 与负数 ,相对应的 原码 与反码, 其中原码可以认为是正数, 反码可以认为是负数, 但是计算机使用的补码进行运算 是为什么呢? 答案是 : 反码中 表示 0 的编码 可以有俩个, 但是在计算机中 唯一的字符只能有唯一的编码方式 ,所以引出了补码, 补码的定义是 : 原码的补码就是它本身, 反码的补码是它除了符号位 , 其余按位取反 ,末位加 1 . 其中, 反码的运算中, 符号位也是参与的, 如果有溢出的符号位, 直接舍弃, 得到的最终结果就是答案
Java字节和字符的区别
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示,1B(byte,字节)=8bit(位)
字符(char):是指计算机中使用的字母、数字、字和符号。依据字符不同的编码格式,每个字符单位对应的字节数是不一样的。
数据类型
在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型有四类八种:
四类:整型、浮点型、字符型以及布尔型
八种:八种数据类型都有其包装类,这个会在后面说。
数据类型 | 关键字 | 内存占用 | 范围 |
字节型 | byte | 1 字节 | -128 ~ 127 |
短整型 | short | 2 字节 | -32768 ~ 32767 |
整型 | int | 4 字节 | ~ |
长整型 | long | 8 字节 | ~ |
单精度浮点数 | float | 4 字节 | 有范围,一般不关注 |
双精度浮点数 | double | 8 字节 | 有范围,一般不关注 |
字符型 | char | 2 字节 | 0 ~ 65535 |
布尔型 | boolean | 没有明确规定 | true 和 false |
- 在Java中,无论是16位系统还是32位系统,数据类型的内存占用都是不变的。
- 整形和浮点型都是带有符号的
- 整型默认为int型,浮点型默认为double , 无论是单精度和双精度 一般都是有误差的, 不是很准确
- 字符串属于引用类型
变量
变量定义:经常改变的量被称为变量,而数据类型就是用来定义不同种类变量的。
解释: 数据类型定义了一个范围, 而变量相当于容器, 不同类型定义的变量, 就相当于这个容器有多大的范围, 在这个范围中可以正常使用, 而超出这个范围就会发生溢出(你想 用 一升的瓶, 装5升的水, 那4升的水是不是溢出了) 用溢出的变量去计算,得到的结果肯定和你估计的相差甚远.
这也是为什么 Java支持 小范围自动先大范围的数据类型升级, 而不支持大范围的数据类型向小范围的降级(一般需要强制类型转换)
定义变量的语法格式为:
数据类型 变量名 = 初始值;
示例
int a = 10;
double d = 3.14;
char c = 'A';
boolean b = true;
整型变量的定义及使用
// 方式一:在定义时给出初始值
int a = 10;
System.Out.println(a);
// 方式二:在定义时没有给初始值,但使用前必须设置初值
int b;
b = 10;
System.Out.println(b);
// int型变量所能表示的范围:
System.Out.println(Integer.MIN_VALUE);
System.Out.println(Integer.MAX_VALUE);
// 注意:在定义int性变量时,所赋值不能超过int的范围
长整型变量
long b = 10; // long定义的长整型变量
long c = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
// long型变量所能表示的范围:这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.
System.Out.println(Long.MIN_VALUE);
System.Out.println(Long.MAX_VALUE);
//long的包装类型为Long
短整型变量
short a = 10;
System.Out.println(a);
// short型变量所能表示的范围:
System.Out.println(Short.MIN_VALUE);
System.Out.println(Short.MAX_VALUE);
//short的包装类型为Short
字节型变量
byte b = 10;
System.Out.println(b);
// byte型变量所能表示的范围:
System.Out.println(Byte.MIN_VALUE);
System.Out.println(Byte.MAX_VALUE);
//字节的包装类型为Byte
浮点型变量
- 在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)
- double:在Java中是个近似值,而不是精确值。
double d = 3.14;
System.Out.println(d);
//double的包装类型为Double
单精度浮点型
- 一般写代码不是很常用float,因为表示数据范围较小
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
// float的包装类型为Float。
字符型变量
- Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
- 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文
char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2);
// 注意:java中的字符可以存放整形
char c3 = '帅';
System.out.println(c3);
布尔型变量
- boolean 类型的变量只有两种取值, true 表示真, false 表示假.
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.所以不要和C搞混了
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
//boolean的包装类型为Boolean
类型转换
自动类型转换(隐式),如下例:a=b;
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。
int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败
强制类型转换(显式)
特点:数据范围大的到数据范围小的,只能相同类型中转换。
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容
字符串类型
在Java中”+"左右如果有字符串,那么代表的整体为字符串。
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2); // s1+s2表示:将s1和s2进行拼接
int 转成 String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
String 转成 int
String str = "100";
int num = Integer.parseInt(str);
关于引用类型与非引用类型的区别
我们都知道动物和植物的区别, 其中最主要的区别就是 ,植物 可以自给自足, 动物不行, 而Java中 引用类型与 非引用类型的主要区别也在此, 引用数据类型 不可以自给自足,必须有基础类型 , 而非引用类型 也就是 八大基础类型, 可以实现只调用基础类型.
这里特指一下 字符串, 很多人都知道字符串是引用类型, 也知道在Java中 可以直接使用 String关键字来使用, 但是字符串 的本质 是字符组成的, 所以字符串和字符数组是能相互转换的 , 他俩的关系就相当于, 英语26个英语字母 与单词的区别 , 字母的不同排列组成了字符串
关于对象
Java中对象可以分为很多 , 现在对Java对象做一个简单的介绍
字符串对象: String 上面已经介绍过了 就不在重复介绍了
枚举: 它的作用是关联两个东西。举个例子。你对一个柜子进行了123标号,你告诉别人要想存储的柜子, 就要告诉你柜子对应标号, 这个标号和这个柜子就建立起来一种链接关系
接口: 主要定义的是一种规范 :
类 : 是实现对象的一种模具
数据 : 是存储大量相同类型的对象