一、面试的时候问了我一个问题:++i和i++的区别是什么,是否是线程安全的,然后给我一个代码,让我判断执行结果!
先抛开代码,说说二者的区别:
1 :++i是先给 i 赋值,然后 i= i + 1, 得到的最终的 i ,然后 在去对这个 i 进行其他操作
比如i=1, a=++i , 执行步骤是:①:i=1 ,② i=i+1 ③ a=i ;a的最终值是2
2:i++ 是先操作,操作后再给 i +1(注意最后是给 i 加1 不是给操作后的结果加1)
比如: i=1, a=i++ , 执行步骤是:①:i=1 ,② a=i ③ i=i+1 ;a的最终值是1
两个都不是线程安全的,他们都不是原子操作!
二、以下的打印结果
System.out.println(110); 结果:110
System.out.println(010); 结果:8
System.out.println(020); 结果:16
System.out.println(070); 结果:56
System.out.println(080); 结果:抛出异常
原因是:直接打印:以0开头的会按照8进制计算,所以数字最多是7,所以System.out.println(080); 结果:抛出异常
三、int 和integer比较
注意:对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false(这里说的是:==):
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
Integer i = 128;
Integer j = 128;
System.out.print(i.equals(j)); //true