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.print(ex.ch);
System.out.println();
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
运行的结果是:good and gbc.但是,以我的想象应该是test ok and gbc才对.因为数组和字符串都是对象,在java当中都是引用类型,按照引用类型传递change方法调用完毕后应该得到的是改变之后的结果,为什么只是把数组的内容该了,而字符串没有被改变呢?
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.print(ex.ch);
System.out.println();
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
运行的结果是:good and gbc.但是,以我的想象应该是test ok and gbc才对.因为数组和字符串都是对象,在java当中都是引用类型,按照引用类型传递change方法调用完毕后应该得到的是改变之后的结果,为什么只是把数组的内容该了,而字符串没有被改变呢?
解决方案 »
- 有兴趣的来练练,某考试中的一题
- java中的集合
- 求完整代码,得到正确的就结贴
- “输入一组整数存放在数组中” 在java 中怎样实现?急!!!
- socket通信问题
- 现在有一串目录c:\root\a;c:\root\b;c:\root\c我想把c:\root都去掉,只剩下后面的部分,应该如何做?
- 安卓快播QVOD协议讨论,再开一帖讨论.来者有分
- 急求:如何编译含“import netscape.javascript.JSObject;”的java文件 ?
- 简单问题。关于IO的
- 鸭子也要飞
- 怎么样让JAVA程序在某一个时刻(比如17:30),去响应某个特定的事件。
- 推荐几本JAVA图形设计入门与提高方面的书籍
字符串:str="test ok"; //使地址拷贝指向了一个新的地址,但原引用没有改变
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(" and ");
System.out.print(ex.ch);
System.out.println();
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
System.out.print(str);
}
}
是传递的对象,但是在str="test ok";会创建一个新的对象,不会改变
ex.str
str.charAt(0)='t';
str.charAt(1)='e';
...
str.charAt(n)='k';
public class Example{
StringBuffer str=new StringBuffer("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);
System.out.println();
}
public void change(StringBuffer str,char ch[]){
str.append("Hello");
ch[0]='g';
}
}
这回得到的结果是:"goodHello and gbc".为什么呢?
看看这个
要想改变String参数的内容,恐怕只用这个方法吧
str.charAt(0)='t';
str.charAt(1)='e';
...
str.charAt(n)='k';
============
不好意思,弄错了!
str.charAt(n)不是左值,不能赋值的
str="test ok";
仍然是改变不了的
str=new StringBuffer("good111111");
char[]ch1={'g','o','d'};
ch=ch1;
}
测试结果 good and abc方法的传参很妙 你可以使用它得到传递过来的基本数据类型和对象的地址
对于非基本类型甚至可以直接操作它。比如
str.append("Hello");
ch[0]='g';但是你一旦重新赋值的话 ,它就变成一个很普通的方法内的局部变量而已。比如
str=new StringBuffer("good111111");
char[]ch1={'g','o','d'};
ch=ch1;接分