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);
System.out.print(ex.str+" and ");
System.out.println(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}输出结果为什么会是good and gbc
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);
System.out.print(ex.str+" and ");
System.out.println(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}输出结果为什么会是good and gbc
public class Example { String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
} public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.println(ex.ch);
}
}
上面是你的代码,再看一下我改完之后的代码:public void change(String str, char ch[]) {
this.str = "test ok";
ch[0] = 'g';
}
这样才能把 ex的str的值改变。这里为什么你的change方法 能改变 ex的 ch 而不能改变 str,你可以参考一下 这个帖子:http://topic.csdn.net/u/20100716/15/db8ffab6-cc0c-4f04-89c5-a2e49d7ece44.html , 我当时也有和lz有类似的困惑。
故方法里更改的只是参数的副本,这个是不影响参数本身的值的
当参数是数组的时候,其实传进来的是那个数组在内存中的地址的值的副本
相当是两个引用的值相同,指向同一个内存空间,那样是可以通过这个地址去修改内存中的值的
s - 要打印的字符数组
抛出:
NullPointerException - 如果 s 为 null以上是api的参考文档.多查api
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}值传递传递的是值的拷贝,所以传过去的值被改变也不会改变原来的值。该例中的“str”就是一个值的拷贝。public void change(String str, char ch[]) {
this.str = "test ok";
ch[0] = 'g';
}
这里的"Str"加了this之后表示的是全局变量.
String对象是保存在内存中的 StringBuffer是在缓存中
至于String的值不可变忘了 好像有点复杂 暂时先死记住就行了 等自己的修炼的差不多了也就自然明白了