站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请问哪位大虾能解答一下:String字符串相加的问题

请问哪位大虾能解答一下:String字符串相加的问题

摘要: 请问哪位大虾能解答一下:String字符串相加的问题


String string1 = -#34;this is-#34;;
String string2 = -#34; cook-#34;;
String string3 = -#34;this is cook-#34;;
String string4 = -#34;this is cook-#34;;
String s = string1 + string2;
String s5 = s;
if(string3==string4){System.out.println(-#34;string3==string4-#34;);}
if(string3==s){
System.out.println(-#34;string3==s-#34;);
}else{
System.out.println(-#34;string3!=s-#34;);
}
if(string3==s5){
System.out.println(-#34;string3==s5-#34;);
}else{
System.out.println(-#34;string3!=s5-#34;);
}
if(string3.equals(s5)){System.out.println(-#34;string3.equals(s5)-#34;);}

运行结果是:
string3==string4
string3!=s
string3!=s5
string3.equals(s5)

我想问的是:既然 string3==string4 为什么 string3!=s ,string3!=s5
先谢各位的解答!!!


1) string3==string4 是因为都是指向一个地址,所以对象相等;
2)string3!=s ,string3!=s5 因为不是指向一个地址,所以对象不相等;
3)字符串的比较应该用 equals




谢谢楼上的老兄 但是我还是不明白
String string3 = -#34;this is cook-#34;;
String string4 = -#34;this is cook-#34;;
你的意思是 这样定义 二者就是指相同一个内存地址?

String s = string1 + string2
这样定义的话 虽然拼成的字符串内容相同 也不能指向同一个地址?

不知道有什么依据可查么?谢谢



你弄懂 -#39;==-#39; 和equal 就知道 怎么回事了



java基础里面有教的慢慢研究



String s = string1 + string2
这里新开辟了内存空间存放string1+string2的值
所以与 s3,s4的地址不一样
对于String对象来说== 比较对象内存地址,equals比较对象内容


这里用到java里面是一个串池的问题
你s1+s2其实是在堆里面重新创建了一个新的对象s保存的是一个堆空间的地址
而s3和s4你没有用new所以是在串池里面的他们地址相同
所以s3==s4而s!=s3
你可以用s.intern()方法来得到s在串池里面的地址s=s.intern();
这样s就和s3,s4相等了


其实是因为String类比较特殊


谢谢各位的回复 是我没说清楚问题 我明白== 和equals的区别 我这里是想讨论==的问题
我把题目修改一下
String string1 = -#34;this is-#34;;
String string2 = -#34; cook-#34;;
String string3 = -#34;this is cook-#34;;
String string4 = -#34;this is cook-#34;;
String s = string1 + string2;
String s5 = s;
if(string3==string4){System.out.println(-#34;string3==string4-#34;);}
if(string3==s){
System.out.println(-#34;string3==s-#34;);
}else{
System.out.println(-#34;string3!=s-#34;);
}
if(string3==s5){
System.out.println(-#34;string3==s5-#34;);
}else{
System.out.println(-#34;string3!=s5-#34;);
}

运行结果是:
string3==string4
string3!=s
string3!=s5


我想问的是:既然 string3==string4 为什么 string3!=s ,string3!=s5

先谢各位的解答!!!



kyo324() --有点明白你的意思了 我先看一下


简单具体的说就是s3,s4地址一样
s和他们地址不一样
s和s5地址一样你可以看s==s5就是true
原因就是我说的


String string3 =new String( -#34;this is cook-#34;);
String string4 =new String( -#34;this is cook-#34;);

这样改的话string3就 != string4 了



==和equals有差别的,前面几楼解释的很清楚了


不知道串池是在哪儿呆着的,堆和栈怎么分的,什么在应该在什么地方呆着呀?


字符串比较用equals就是



深圳java程序员博客,为你提供多方面资料http://drivemewild.blogchina.com


谢谢各位回复 结贴了


↑返回目录
前一篇: 方正的面试题目
后一篇: java中怎么把月/日/年格式的字符串转换成年/月/日的日期格式?