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就是同一个引用了?
使用逻辑操作符&&(或||)操作符连接多个布尔表达式,在已经确定整个表达式值得情况下,后面的表达式不会执行。这种情况称作“短路”。
使用按位操作符&(或|)连接布尔表达式与逻辑操作符具有同样的效果,但是不会出现“短路”,即所有的表达式均会执行。
位移操作符>>或(<<)把整数转换为二进制数后进行移位,再转化成十进制数返回。