Bootstrap

Java基础-一些易错知识点

public class Main {
    public static void main(String[] args) {
        byte b;
        b=(byte) (127+3);
        System.out.println(b);
//        why?
//        127
        // 原码和补码  01111111
        //3
        // 补码和原码  00000011
        //  127+3底层都是补码相加
        //  结果:10000010-得出的是原码还要转换为补码(当然正数补码就是原码)
        //  11111110 对应  -126
        b+=1;//为什么这个不报错?
        //因为+=底层是自动进行类型转换,它是找到b的地址,然后吧对于里面的数据变成运算后的结果

        //b=b+1;//为什么这个错误?,因为+是一个整体,左边整体会向大的类型(int)转换
        //所有右边的是一个int,int不能直接赋给byte类型的b需要强转
        //而且= +效率比+=低,因为它需要先存储我们+的结果再赋值
        //关于>>和<<为什么比/2和*2效率高的原因也是这个
        
        int i=1,j=2,k=3;
        boolean a;
        a=i>j&&k++>0;
        System.out.println(k);//k的值为3不变,因为前面的i>j已经错了,所以不会运行表达式的后半部分
        //就是没有执行k++
    }
}
;