Post

Java语法

关键字

transient

若类实现了Serilizable接口,那么该类的对象就可以被序列化。如果想要排除该类的某个字段,就可以给该字段加上transient关键字,该字段就不会被序列化(ObjectOutputStream)。需要注意的是,transient只能修饰类字段,不能修饰类和方法,也不能修饰方法的中间字段。另外,静态字段无论加不加transient都无法被序列化,因为静态字段属于类,不属于对象。

运算符

位运算符

  • &:按位与(都为1才得1)
  • |:按位或(有1就得1)
  • ^:按位异或(不一致则得1)
  • ~:按位取反(1得0,0得1)
  • <<:按位左移(左移后符号可能变,也可能不变)
    1
    2
    3
    4
    5
    6
    
    // 10000000 00000000 00000000 00000001
    int a = -2147483647 << 1;
    System.out.println(a);
    // 01000000 00000000 00000000 00000000
    int a1 = 1073741824 << 1;
    System.out.println(a1);
    

    运行结果

    1
    2
    3
    4
    
    // 00000000 00000000 00000000 00000010
    2
    // 10000000 00000000 00000000 00000000
    -2147483648
    
  • >>:按位右移(右移后符号不变)

    解释:符号位(最高位)不变,然后所有位(包括符号位)右移

  • >>>:符号位补零按位右移(右移后一定为正数)

    解释:符号位补零,然后所有位(包括符号位)右移,两种右移对比:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    // 10000000 00000000 00000000 00000011
    int b = -2147483645 >> 1;
    int c = -2147483645 >>> 1;
    System.out.println(b);
    System.out.println(c);
    
    // 01000000 00000000 00000000 00000011
    int d = 1073741827 >> 1;
    int e = 1073741827 >>> 1;
    System.out.println(d);
    System.out.println(e);
    

    运行结果

    1
    2
    3
    4
    5
    6
    7
    
    // 11000000 00000000 00000000 00000001
    -1073741823
    // 01000000 00000000 00000000 00000001
    1073741825
    // 00100000 00000000 00000000 00000001
    536870913
    536870913
    
This post is licensed under CC BY 4.0 by the author.