刚学java,一个很简单的String问题
本人刚学java,但是被一道题目困住了,希望高手能详细的解答一下!
public class zuoye6 {
public static void mb(String x,String y){
x.concat(y);
y=x;
}
public static void main(String[] args) {
String a="A";
String b="B";
mb(a,b);
System.out.println(a+"."+b);
}
}
我不明白地地方不是答案,而是为什么String y可以改变原来的值,当y=x之后,y的值就被改变了,不是说java里面String内容不可以被改变的吗?
------解决方案--------------------变量x和y持有的都是对象的引用,进行y=x操作之后,此时y指向另一个对象,操作前后是两个对象
------解决方案--------------------这应该用值转递与引用转递来回答吧
------解决方案--------------------运行结果为A.B
String内容不可以被改变的
String a="A";
String b="B";
除非a,b引用的对象变了
如 a=b,而a被原来的引用丢弃了
------解决方案--------------------String对象内容改变是通过内存地址的“断开-连接”变化完成的,本而身字符串的内容并没有任何的变化。b比如:
String str=“abc” ;
for(int i=0;i<1000;i++){
str += i ;
}
结果应该很清楚。
那她就要断开和连接1000次,这样性能很低,所以老师一般都会叫用StringBuffer或是StringBluider了
------解决方案--------------------因为那只是传值,LZ看下这文章
http://www.blogjava.net/alinglau36/archive/2011/03/07/261747.html