String s1,s2;
s1="how are you";
s2="how are you";
String tom1=new String ("we are students");
String tom2=new String ("we are students");
请问大家:
s1==s2的值是false还是true?为什么?
tom1==tom2的值是false还是true?为什么?
----------------解决方案--------------------------------------------------------
如果我没记错的话:
s1==s2是返回true;
tom1==tom2是返回false;
因为s1,s2只是赋给了各个变量值,“==”就是比较值的大小,所以应该返回true;
因为tom1,tom2是你创建的两个不同名的对像,对像用"=="比较是去比较他们两个对像的引用地址,创建对像时是在堆内存里的,是存的它们在栈内存的地址,所以用“==”应该是返回的false,如果要使其返回true就要用"tom1.equals(tom2)",这样返回值应该是true;你可以试下,如果不对的话就是我说反了,呵。。。如果小弟有说错的地方请大家批评,我绝不是为了误导大家哟!大家一起加油,一起学习!
----------------解决方案--------------------------------------------------------
应该说s1,和s2都指向了"how are you";这个地址(对象)~
tom1==tom2是返回false;就是和楼上所说的差不多了!~
----------------解决方案--------------------------------------------------------
答案就是:
s1==s2是返回true;
tom1==tom2是返回false;
谢谢!
----------------解决方案--------------------------------------------------------
s1="how are you"
s2="how are you"
是隐式地创建了一个对象,赋值时候,s1和s2均指向同一个对象,所以==号比较是比较的对象内存地址,所以返回true。
tom1和tom2通过new后,指向两个不同的对象,只是其内容一样了而已,所以==号比较返回false。
----------------解决方案--------------------------------------------------------
"how are you"会保存在一个String常量池里面,而s1和s2会被系统自动分配指向这个常量,所以会返回true
----------------解决方案--------------------------------------------------------
应该说s1,和s2都指向了"how are you";这个地址(对象)~
tom1==tom2是返回false;就是和楼上所说的差不多了!~
说的对
----------------解决方案--------------------------------------------------------