byte:1个字节,即8个bit位(常用)
short,2个字节,(16个比特位)
int:4个字节(32个比特位)(常用)
long:8个8位(64个比特位)要使用需在后面加“L”,如“123456789L”
浮点类型:小数
float:单精度(4个字节)默认小数位double,要使用需在后面加“f”,如"2.6f"
double:双精度(8个字节)
自动类型提升:不同类型的数值运算会强制把占用内存小的转化为大的然后运算
强制类型转换:
byte a = 3
a = (byte)(a + 3)
// 3 是int, a是byte ,所以默认计算后的a 应该是int ,但可以强制byte类型,3会损失精度(慎用)
++自增运算
b = a ++, 先将a 的值存在临时内存中,对a 进行a = a + 1, 再临时内存中a原来的值赋给b
b = ++a, a = a+1, 再将a赋给b
int i = 3;
i = i++ (实际上是 temp = i(3), i = i+1(4),i = temp(3))
+=,-=,/=, *=, %= 将左右两边进行+,-,/, *, % 运算,再赋给左边
面试题
1,
byte b1 = 4;
byte b2 = 4;
byte b = b1 + b2;
为什么会报错:因为b1,b2是变量,数据不确定,所以b 要用int
2,
short s = 3;
s+=4; 与 s = s + 4; 有什么区别
解答:
s = s +4会报错,因为s 两个字节,4是四个字节(int),加完后编程四个字节(int),无法赋给short型的s,(已经自动类型提升,不能赋给空间较低的类型)
要修改的话:s = (short)(s + 4)
s += 4,底层会自动进行类型转换,然后再赋值,因为+=和=一样都是赋值运算
(已经进行了自动强制类型转换)
模运算(%):涉及到负号时,只参考被模数,如(-5%2=-1,5%-2=1)
任何数%2不是0就是1,可以实现开关运算
+(加法或连接符),任何数据和字符串相加都是连接,如3+“2” = “32”(不是三十二,而是三二)
char:2个字节