public class Sample {
long length; public Sample(long l) {
length = l;
} public static void main(String[] args) {
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}
问下面表达式哪个返回true??
A:s1 == s2;
B:s2 != s2;
C:m == s1;
D:s1.equals(m);
long length; public Sample(long l) {
length = l;
} public static void main(String[] args) {
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}
问下面表达式哪个返回true??
A:s1 == s2;
B:s2 != s2;
C:m == s1;
D:s1.equals(m);
B:s2 != s2;
C:m == s1;
D:s1.equals(m);
因为s1 和 s2的堆地址不同,所以返回false. 同样的,s2和s2本身肯定相同,所以返回false.
m 是基本数据库类型,而s1则不是,所以他们俩是不具可比性的.同样的道理D里的也不具可比性!
m为long类型数据,不能和sample类型直接用==比较,所以不能通过编译;
equals(ojecct)方法中的参数要求是对象,而long类型的m不是对象,所以也不能通过编译。
:),太不认真了
static String s1 = "I am unique!"; public static void main(String args[]) {
String s2 = "I am unique!";
String s3 = new String(s1);
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println(s3 == s1);
System.out.println(s3.equals(s1));
System.out.println(TestClass.s4 == s1);
}
}class TestClass {
static String s4 = "I am unique!";
}
true //系统为S1分配一静态空间存储字串"I am unique!",在程序运行期间不变;s2被直接指
向字串“I am unique!”,即s1与s2是指向同一块内存地址,而且内容一样,所以他们
虽然名字不同,确是同一对象,如同一个人有两个名字。
true //不用多说吧,类变量的值比较,值相同,返回true
false//s3是动态生成的,系统从新分配一段空间存放s1对应的字串,所以s3,s1的值相同,但却
是不同的两个对象,‘==’比较当然是false
true//……不多说了
true//这个静态初始化,有点晕,大家讨论
不对的吧!!
最后一个,是因为String 创建的时候,是在java的容器里进行的,而不是根据内来分的,和s1==s2是一样的道理
没错^_^
第一个例子S2和S2指向的是同一个字符串,但S2!=S3返回的是true,说明比较的是S2和S3的地址,而不是指向的对象。
但第二个例子中S1==S3返回true就让人搞不明白了,那位大哥给讲讲啊
B:s2 != s3;
C:m == s1;
D:s1.equals(m);
都返回错误
s1和s2是指向两个不同的sample类的对象引用,所以s1和s2不会相等的
m为long类型数据,不能和sample类型直接用==比较,所以不能通过编译;
B:s2 != s3;
C:m == s1;
D:s1.equals(m);结果:
false
false
error 编译错误
error 编译错误
同意zxjoe(joe)的说法。
System.out.println(s1.equals(s2));
System.out.println(s3 == s1);
System.out.println(s3.equals(s1));
System.out.println(TestClass.s4 == s1);
结果:
true
true
false
true
true
同意cs_winner(翼)的说法。