在做一个东西,遇到了一个挺诡异的问题的,
如果字符串用单个字符累加起来,
结果会与字符串不相等。
我简化了下,也就是下面的代码:
String str1="";
str1+='a';
str1+='b';
str1+='c';
String str2="abc";
System.out.println(str1==str2);结果是false
谁能帮我解释下吗?
最好能帮我给出解决方法,使得str1== str2能成立,
比如str1要怎么转换?
如果字符串用单个字符累加起来,
结果会与字符串不相等。
我简化了下,也就是下面的代码:
String str1="";
str1+='a';
str1+='b';
str1+='c';
String str2="abc";
System.out.println(str1==str2);结果是false
谁能帮我解释下吗?
最好能帮我给出解决方法,使得str1== str2能成立,
比如str1要怎么转换?
楼下不用回复了
str2 = new String("abc");str1 和 str2 是两个不同的对象;
要比较对象的值就用str1.equals(str2);
str1+='a';
str1+='b';
str1+='c';
String str2="abc";
System.out.println(str1==str2);最后str1 指向 data meg(数据存储区)的" abc",str2 = "abc"; 内容不同肯定不可能“==”,即使内容相等最后的结果也不可能是true,因为他们的内存指向不一样,这种题试着分析内存的指向和存储变化比较好~
System.out.println(str1==str2);----改为System.out.println(str1.equals(str2));
这样就true了
想相等的话调用str1的public String intern()方法,没测试,自己去试试,OK?
但是你的比较方法是比较它们的内存地址.
当然会返回false了
java里比较字符串的值是用equals
str1.equals(str2) 这样就能返回TRUE了
字符串的比较:equal()方法比较的是对象的内容是否相等,==比较的是对象的引用是否相等
对象的比较:建议重写equal()方法
String str1="";
str1+='a';
str1+='b';
str1+='c';
不如将str1定义为StringBuffer
String每次使用+=要耗费的内存比StringBuffer多
public boolean equals(){
boolean tr=true;
return tr;
}
这样写了后,任何二个String用equals都是返回true;(好像说到别的地方去了....)
以前都用c++,第一次用java,没想到问题这么容易就处理好了。
另外,哪门语言哪个时刻不会出现新手?烦请不要用这样的语气来打击新手。对你来说你见过很多次这样的白痴问题,
但对于问问题的人来说绝对是第一次,不可能是第二次!不回复没人当你是哑巴。
确实是自己查了很久,先去javaeye,最后才来CSDN的。
一直习惯c++的思维方式,哪里会想到java有这样的区别。虽然不喜欢你跟5L的回答方式,但是还是很感谢其他人能热心回复这么简单的问题的。哪个新手没白痴过?谁不是从不懂到懂的?
{
public static void main (String args[]){
String str1="";
str1+='a';
str1+='b';
str1+='c';
String str2="abc";
System.out.println(str1.equals(str2));
}
}
用equals方法比较对象的值
反编译之后,你就知道为什么是false了。
用equals方法比较对象的值
你把"=="改成"equals" 结果就是true.
这个方法
== 在这里比较了对应字符串的内存地址