一、 a+=b和a=a+b的区别
public classDemo
{
public static void main(String[] args)
{
short a=4;
a+=5;
System.out.println(a);
}
}
程序运行结果是9,+=在java中是一个运算符,两个操作数使用运算符执行操作时候,如果类型不一致,则向高精度类型转换,当然没问题。(int比short精度高)
public classDemo
{
public static void main(String[] args)
{
short a=4;
a=a+5;(a是short,5是int,【a+5】a自动转换成高精度int,{【a+5】=9,9是int类型},shrot a = int 9报错)
System.out.println(a);
}
}
这段代码编译会报错,因为a+5,a和5的类型不一致,会使short转到int类型,然后把int赋值给精度比自己低的变量会报错。
总之,当类型不一致时,a+=b和a=a+b有区别,当类型一致时,他们没什么区别。
a -=b和a = a-b同理
精度
1、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)
二、a++和++a的区别
答案是9和11
- i++这个运算符是先参与运算然后自身的值再自加1
- ++i这个运算符是先自加1然后再参与运算
首先分析一下上面代码的执行流程,第一句输出语句输出的是i++根据我们刚才说的原理,它应该是先参与运算,也就是先输出结果9,输出结果后然后自加1变成了10,然后执行第二句输出语句输出++i,根据刚才说的++i是先自加,这个时候i的值为10,自加后就变成了11,输出结果就是11,所以上面的代码的执行结果为9和11。
总结:关于两者的区别大家记住一句话i++是先参与运算然后自加1,++i是先自加1然后参与运算
下面大家再看一道面试中的基础小题目,设x=1,y=2,z=3,则表达式y+=z–/++x的值是( )。
A. 3 B. 5 C. 4 D. 5
这个题目的答案是A
首先由于Java中运算符的优先级关系,z–是先参与运算,++x先自加1变成了2,z/x=3/2=1,y=y+1=2+1=3;所>以最后的结果为3,这个表达式执行完后各变量的值分别为y=3,x=2,z=2。
a++
class demo1
{
public static void main(String[] args)
{
int a=20;
int b=19;
/*
先运算在赋值;
1. b先和a作比较,b比a小为假,所以a还是20;
2. b在自增加1,所以b为20;
3. 因为三元判断为假,所以c等于自增后的b加a为40;
*/
int c= b++>=a ? a++:a+b;
System.out.println(a);//结果是:20
System.out.println(b);//结果是:20
System.out.println(c);//结果是:40
}
}
++a
class demo1
{
public static void main(String[] args)
{
int A=20;
int B=19;
/*
先赋值在运算;
1.B先自增为20;
2.三元运算自增后的B等于A,所以c等于20;
3.因为三元运算为真,所以A自增1为21;
*/
int C= ++B>=A ? A++:A+B;
System.out.println(A);//结果是:21
System.out.println(B);//结果是:20
System.out.println(C);//结果是:20
}
}