【Thinking in Java】操作符

来源:互联网 发布:javascript注释 编辑:程序博客网 时间:2024/06/05 18:33


Java在方法调用过程中传递的是“对象的引用”,但对于基本数据类型,传递的是参数的拷贝。

所以下列代码输出的分别是Z和4。

public class Letter {char c;}public class PassObject {public static void main(String args[]){Letter x=new Letter();int a=4;x.c='a';f(x);i(a);System.out.println(x.c);System.out.println(a);}static void f(Letter y){y.c='Z';}static void i(int num){num=8;}}


a++和++a,别是先传值和先运算。


对象的等价性。对于下列代码,输出的分别是:YES、NO、NO、YES。

对于后三个的解释为:

==比较的是引用,而不是对象本身。

equals在这里比较的是对象本身。事实上,equals优先比较的也是对象的引用,但是Java很多类重写了equals方法,使其比较的是对象本身,就像这里的String一样。

public class Equivalence {public static void main(String args[]){String str1="a";String str2="a";if(str1==str2){System.out.println("YES");}else{System.out.println("NO");}String s1=new String("abc");String s2=new String("abc");if(s1==s2){System.out.println("YES");}else{System.out.println("NO");}Integer a=new Integer(4);Integer b=new Integer(4);if(a==b){System.out.println("YES");}else{System.out.println("NO");}if(a.equals(b)){System.out.println("YES");}else{System.out.println("NO");}}}

但是对于第一个为什么成立存疑,难道这样写str1和str2就是同一个引用了?


使用逻辑操作符&&(或||)操作符连接多个布尔表达式,在已经确定整个表达式值得情况下,后面的表达式不会执行。这种情况称作“短路”。

使用按位操作符&(或|)连接布尔表达式与逻辑操作符具有同样的效果,但是不会出现“短路”,即所有的表达式均会执行。


位移操作符>>或(<<)把整数转换为二进制数后进行移位,再转化成十进制数返回。

0 0
原创粉丝点击