Java基本变量
8大基本类型
类型 | 占用字节 |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
boolean | 1 |
char | 2 |
float | 4 |
double | 8 |
- 变量在使用前必须赋值.不能只声明不初始化.(Java的基本类型默认值在类实例化,也就是对象中才有默认值0,或者是静态变量)
- 整数没有加上标识,默认是int(long型在数据后面加L),小数没有加上标识,默认是double(float型在数据后面加F)
- java中整数数据类型都是已补码的方式进行存储的
数据类型转换与运算
- byte,short,char型的类型进行运算时,会先自动转型为int型.
原因: Java虚拟机的操作码长度只有一个字节.但是一个字节不够各种数据类型与运算符的结合. 所以对不常进行运算的数据类型在运算时进行转换.
大部分的指令都没有支持byte,short,char.没有任何指令支持boolean类型数据.
编译器在编译期或者运行期将byte,short,boolean,char类型的数据带符号扩展为相应的int类型数据.因此大多数对于byte,char,short和boolean类型数据的操作,实际上都是使用相应的int类型作为运算类型的.
运算符
字节码指令入门
-
iconst_0到iconst_5—将int常量0,1,2,3,4,5分别压入到操作数栈顶
-
iload_0到iload_3—将第0,1,2,3个本地变量的值分别压入到操作数栈顶
-
istore_0到iload_3—将操作数栈顶的值存入第0,1,2,3个本地变量中
-
iadd—取出操作数栈顶的两个int型数值相加,并将结果压入栈顶
-
isub—取出操作数栈顶的两个int型数值相减,并将结果压入栈顶
-
imul—取出操作数栈顶的两个int型数值相乘,并将结果压入栈顶
-
idiv—取出操作数栈顶的两个int型数值相除,并将结果压入栈顶
【参考】详细指令介绍
算术运算符 - + * / %
赋值运算符 = += -= *= /=
优点: 编译器会自动进行强类型转换,无需手动强转
short s = 10;
s = s + 2; //报错
System.out.println(s);
short s = 10;
s += 2; //编译器会自动进行强制类型转换
System.out.println(s);
关系比较运算符 == != > < >= <=
==和!=
对于基本数据类型, ==比较俩个数据的数据值
对于引用数据类型,==比较比较俩个对象的内存地址
逻辑运算符 & | ! ^ && ||
&&与&的区别:(|| 和 | 同)
&&为短路与, 如果左边为false 则右边不会执行,&都会执行
二进制位运算符 & | ~ ^
移位运算符 << >> >>>
- << 算术左移(保留符号位,其他位左移,最低位补0)
- >> 算术右移(保留符号位,其他位右移,最高位补原先的最高数据位)
- >>> 无符号右移 逻辑右移 ( 逻辑右移,最高位永远补0)