public class Example{
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Example ex = new Example();
ex.change(ex.str,ex.ch);
String x = new String(ex.ch);
System.out.println(ex.str+"and"+x);
}
public void change(String str,char[] ch){
str = "test ok";
ch[0] = 'g';
}
}
输出结果是goodandgbcpublic class Example2{
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Example2 ex = new Example2();
ex.change(ex);
String x = new String(ex.ch);
System.out.println(ex.str+"and"+x);
}
public void change(Example2 ex){
ex.str = "test ok";
ex.ch[0] = 'g';
}
}
输出结果是test okandgbc
这两个程序的change方法都是传递的对象,为什么第一个的str不改变而第二个却变了呢
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Example ex = new Example();
ex.change(ex.str,ex.ch);
String x = new String(ex.ch);
System.out.println(ex.str+"and"+x);
}
public void change(String str,char[] ch){
str = "test ok";
ch[0] = 'g';
}
}
输出结果是goodandgbcpublic class Example2{
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Example2 ex = new Example2();
ex.change(ex);
String x = new String(ex.ch);
System.out.println(ex.str+"and"+x);
}
public void change(Example2 ex){
ex.str = "test ok";
ex.ch[0] = 'g';
}
}
输出结果是test okandgbc
这两个程序的change方法都是传递的对象,为什么第一个的str不改变而第二个却变了呢
从而失败;相反char[]可以 作为指针来用完成要求;
Example2中 都用ex.str来调用显然能达到目的。
public class Example3{
String str;
Example3(String s){
str = s;
}
public static void main(String[] args){
Example3 e1 = new Example3("good");
Example3 e2 = new Example3("test ok");
e1.swap(e1,e2);
System.out.println(e1.str+"and"+e2.str);
}
public void swap(Example3 s1,Example3 s2){
Example3 t;
t = s1;
s1 = s2;
s2 = t;
}
}//结果输出goodandtest ok
你的意思是除了String其他对象都按引用传递,可是我的swap参数是2个对象,却并没有改变。
另外,对luc_ne(Luc)的问题,可看一下:
* Because String objects are immutable they can be shared. For example://这里
* <p><blockquote><pre>
* String str = "abc";
* </pre></blockquote><p>
* is equivalent to://等同
* <p><blockquote><pre>
* char data[] = {'a', 'b', 'c'};
* String str = new String(data);
* </pre></blockquote><p>
to cs_winner(翼)
我第一个程序中的str不是类变量啊
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Example ex = new Example();
ex.change(ex.str,ex.ch);
String x = new String(ex.ch);
System.out.println(ex.str+"and"+x);
}
public void change(String str,char[] ch){
str = "test ok";.................这个str用的是你带的参数str,当然不会影响到外面的str
ch[0] = 'g';
}
}
对于String这个类,它很特殊;他的对象既可以用NEW的方法得到,也可以
象数据类型那样通过'='赋值得到,身兼两家之长
要想刨根的话,那只能去看java.lang.String的源代码(结合注释部分一些使用说明)