Java学习回忆录-基础语法-003
数据类型
计算机存储单位
java的数据类型两大类:基本数据类型,引用数据类型
数据类型:整型(常见的) | 数值大小 |
---|---|
byte | 1字节 (-128 ~ 127) |
short | 2字节 |
int | 4字节 |
long | 8字节 |
数据类型:浮点型 | 数值大小 |
---|---|
float | 单精度浮点数(4个字节),只能表示6~7位 |
double | 双精度浮点数(8个字节),可以表示14位左右的小数点. |
其他类型 | |
---|---|
布尔型:boolean | 只有两个值 true false 表示事物正反两面,一个字节 |
引用数据类型 | 数组、类、接口、对象… |
字符型:char | 表示符号,单符号 、一对 ‘’ 表示、‘a’ ‘中’ ‘0’ 、2个字节 |
计算机底层: 就是电路,一个电路通过电压的高和低(通电和断电) 可以表示两种状态. 表示0和1.
计算机最小单位:
比特(bit)
单位太小. 人们通常将8bit提升为一个字节 byte .
1byte=8bit .
计算机的基本单位
字节(byte)
常见单位有:kb mb gb tb
1kb=1024byte 2次方.
java 是强类型语言.
对于不同类型的数据定义了相对的类型, 这些不同的数据类型,在内存中占用的空间也是不同的...
-
常量
固定的值。
常量定义格式:
final 数据类型 常量名 = 值;
字符常量:’ ’ 引起来的值
字符串常量:" " 引起来的值
整数常量:类似124这种数字,默认是int . 123 默认在程序中是4个字节.
长整数:在数字后面加上L表示长整数(L可以大写也可以小写,但是不建议使用小写),12345678901L 整数值.
浮点数常量:默认double 类型.如果需要表示单精度浮点数. 在数值后添加F(f)
null:表示空值,即表示内存中没有开辟空间. -
变量
注意:整型变量默认的是int型,浮点型变量默认的是double型;
变量就是内存中一块有名字的空间,一次可以存储一个数据,通过名字可以访问(取值,赋值)。
变量的格式
数据类型 变量名 = 数值;
数据类型: java可以根据数据类型,确定内存空间的大小
变量名: 为了能够方便定位到这块内存.
数值: 存储的具体的值
注意:
变量定义语句的读法:
数据类型 变量名 = 数值
将数值,赋值给了数据类型的变量名 .
e.g: int age=1;
通俗理解, 就是数值1, 存储到了变量age 中.
- 关于如何起一个好的变名
1.要符合标识符的规则(不能出错)
2. 要有意义,可读.
3. 命名规范
一个单词,全小写.
多个单词,第二个单词起,首字母大写...
理解变量:
存储和空间的思想.
一块有名字的内存, 一次可以存储一个数据. 通过变量名就可以使用这个数, 并且还可以修改.
int a=1;
a=2; //将2值赋值给了变量a .
当给整型变量long型赋值时,如果赋予的数值超过了int型的区间,则需要在数值后面加上L;
当给浮点型变量float型赋值时,后面的浮点数默认是double型,所以必须在数值后面加上F
自动类型提升
可以将较小的数据类型的变量赋值给较大的数据类型的变量。
整数和浮点数,在底层存储数据的方式不同,导致float 表示的数据更多更大…所以8个字节的long型变量就可以自动提升为4个字节的float变量
byte->short->int ->long ->float->double
char ->int ->long ->float->double
注意 char 类型不能转换成short类型
自我理解:short 和 char类型虽然都是两个字节,但是char是无符号的,没有负数,而short是有符号的,存在负数,所以char不能自动提升为short。(理解可能有误)
主要原因: char 和 short 在 计算机中存储的方式不同,就像 int 和 float 一样。
byte short char 在运算的时候会自动提升为int .
byte b1=1,b2=2,b3; //b3=b1+b2; b1+b2时,已经提升为了int了. 注意.
强制类型转换
格式:目标数据类型 变量名=(目标数据类型)源数据;
例如:
int ->byte
int ->char
double ->int
应用场景
整数里边较大的数据类型赋值给较小的.
int ->byte
浮点数转整数
float->int
double ->int
3.14->3
整数转字符
int ->char
97 ->'a'
byte b1=1,b2=2,b3; 正确的写法:b3=(byte)(b1+b2); b1+b2时,
注意只有在进行运算的时候才会有数据类型的提升,以下的情况是不行的
b3 = (byte)b1 + (byte)b2;
这个是错误的,因为 b1 和 b2 都是 byte 类型,所以在运算前的强转是没有作用的,当强转完执行 + 运算的时候,数据类型还是会提升为 int 型,
精度丢失问题
byte b1 = 3*;* byte b2 = 4*;* byte b3 = b1 + b2; // 这里会报错
- byte和byte(或者short,char)进行运算的时候会提升为int型,两个int型相加时也为int型
- b1和b2是变量,变量存储的值是变化的,在编译的时候无法判断里面的值,相加可能会超出byte的取值范围
但是
byte b3 = 3 + 4*;*
这是可以的,因为,Java有常量优化机制,当编译的时候会先把3+4=7,然后判断7 < 127 ,没有问题,就会赋值过去,没有警告。