public class Square {
long width;
public Square(long l) {
width = l;
}
public static void main(String arg[]) {
Square a, b, c;
a = new Square(42L);
b = new Square(42L);
c = b;
long s = 42L;
}
}
哪些值返回true(C)
a == b
s == a
b == c
a.equals(s)
考的是引用和内存。
//声明了3个Square类型的变量a, b, c
//在stack中分配3个内存,名字为a, b, c
Square a, b, c;
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a =
new
Square(42L);
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b =
new
Square(42L);
//stack中的c也指向b所指向的内存
c = b;
//在stack中分配了一块内存,值为42
long
s = 42L;
来看4个选项:
A: a == b
由图可以看出a和b指向的不是同一个引用,故A错
B:s == a
一个Square类型不能与一个long型比较,编译就错误,故B错
c:b == c
由图可以看出b和c指向的是同一个引用,故C正确
d:a equal s
程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下
public boolean equals(Object obj) {
return (this == obj);
}