java中String类与变量相加

public class str {
public static void main(String args[]){
int value=1;
String str1="ABC"+value;
String str2="ABC"+1;
String str3=str1;
String str4="ABC1";
String str5="ABC"+value;
boolean a=(str1==str2);
boolean b=(str1==str3);
boolean c=(str1==str4);
boolean d=(str1==str5);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
结果为什么是
false
true
false
false
str1与str2与str5为什么不等 3和1 却相等
用==不是比较地址吗 那么str1+value的地址就变了吗

==的确是比较地址的。“那么str1+value的地址就变了吗”:是的,String字符串每进行操作(比如像你进行的拼接)都会new一个新对象,新对象肯定会有一个新地址,所以当str1=str1+value时,str1已经指向了别的地址(多说一句原来的“ABC”由于没有了变量指向,这个时候已经是垃圾,等待自动回收)。至于“3和1 却相等”因为String str3=str1,实际上是将str1的地址付给了str3,所以它们指向同一个地址…………当要进行很多次字符串拼接时不要用String,应该使用Stringbuffer,你可以查查为什么
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-15
java中string类型的变量的值是无法改变的,如果想要在字符串后面加其他字符串,需要定义stringbuffer或者stringbuilder变量,stringbuffer和stringbuilder变量与string的功能基本一致,只不过值可以改变,它们是java后面版本升级加入用来完善string的
第2个回答  2012-04-12
两个String对象间用==进行运算,比较的是这两个对象的引用地址是否一样;而不是他们的值是否相等;要想比较两者的值请用equals方法
首先STR1和STR2,str4,str5所指向的引用地址不一样;因此a ,c,d为FALSE;
STR3=STR1;这句代码把STR1的引用付给了STR3,使他们指向同一个引用;
因此b为true
str1+value并没有改变地址,只是改变了值
第3个回答  2012-04-13
我给个地址例子你理解吧。str1在地址001存入“ABC1” str2在地址002上存上“ABC1”,str3=str1的地址也就是001,这里是地址赋值,str4在地址004存入“ABC1” str5也一样。String每次新建都是新建对象,他们的地址是不一样的。 你追加的问题的答案是,地址没变,是内容变了,会自动把int类型转换成string型加了。这是隐式转换。
第4个回答  2012-04-11
总而言之一句话String类在JAVA语言中用==比较的是地址,如果比较是否相同就要调用用equals()方法。可能你学过C 它误导了你。C中字符串是以数组来表示的,它没有类的概念所以比较修改都是直接在原有的基础上修改,而在JAVA中不行额。多看看String类和其中的方法以及一些内存分析你就能懂了 我也是学习JAVA的新手额 以后一起学习多交流额
相似回答