public static void main(String[] args) {
String str = "world";
char[] ch = {'H','e','l','l','o'};
change(str,ch);
System.out.print(str+" and ");
System.out.println(ch);
} private static void change(String str, char[] ch) {
str="change";
ch[0]='C';
}
对于上面的代码,哪位大侠能详细的给我说一下str为什么不变,但ch[0]却变了呢??????
String str = "world";
char[] ch = {'H','e','l','l','o'};
change(str,ch);
System.out.print(str+" and ");
System.out.println(ch);
} private static void change(String str, char[] ch) {
str="change";
ch[0]='C';
}
对于上面的代码,哪位大侠能详细的给我说一下str为什么不变,但ch[0]却变了呢??????
解决方案 »
- 【前60楼回帖有分】想学几门新技术,大家可否推荐一下?
- 推荐一本关于数据结构java语言描述的好书。
- 数据库连接池讨论 C3P0 or dbcp or proxool or .................散分讨论
- Servlet的打包~~~
- 关于元素类型的问题
- 使用HttpClient登录问题(小弟新手请多指教)
- 如何在页面中利用java建一个树状文件管理器
- 一个面试问题想请教一下-线程数是否开得越多越好
- 熟悉Process的朋友请来看看
- 请问被分割成winapi.001,winapi.1xt的两个文件用什么软件合成?
- java timer cancle,如何继续原来的程序
- 弱弱的问个static的问题,求解释
原因就是change(String str, char[] ch)
这个方法里面,str传的是一个值,意思就是你把这个值赋给一个新的对象,这样这个新对象怎么改都不会影响到原对象。。
但是ch传入的是一个对象,把这个对象的地址值传给一个新的对象,这样的话新对象的变化肯定对原对象造成相应的修改。说白了,这两个对象其实就是一个对象,因为有共同的地址值,只不过名称不同而已。。
String 不是一个对象?????
public static void main(String[] args) {
String str = "world";
char[] ch = { 'H', 'e', 'l', 'l', 'o' };
change(str, ch);
System.out.print(str + " and ");
System.out.println(ch);
} private static void change(String str, char[] ch) {
str = "change";
ch = null;
}
运行看看。两个传的都是引用,,,额,,其实java里面都是值传递。。据说没有引用传递求辟谣至于这里嘛,,,个人认为str被覆盖了而ch只是里面值被改变,引用的内存地址还是原来的。