一个对象传递问题

老秋先生 2010-04-07 07:26:07
我的代码如下

public class TestAdd {

public static void main(String[] args) {
String[] arrays = { "我的爱" };
Hello1 h = new Hello1(arrays);
System.out.println(arrays[0]);
}
}

class Hello1 {
String s;

public Hello1(String[] arrys) {
s = arrys[0];
s = "你的心";
}
}



而此时 为什么 String类型 s 改变了arrays【0】的值 为什么输出却没有被改变呢

难道此时在Hello1 类中 s = arrays[0]的时候 s 不是指向 arrays[0]? 的内存地址么?

等待高手
...全文
56 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuaiAWP 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 keeya0416 的回复:]
JAVA只有值传递
你第一次的时候是把参数的值即它指向的地址赋给了 s 后来 s 又指向了别的地方
第2次的时候是通过 s 指向的地址去修改了里边的值 所以参数引用指向的值也变了
[/Quote]
学习
绝对零度9527 2010-04-07
  • 打赏
  • 举报
回复
对对象的重新赋值就是改变引用
keeya0416 2010-04-07
  • 打赏
  • 举报
回复
JAVA只有值传递
你第一次的时候是把参数的值即它指向的地址赋给了 s 后来 s 又指向了别的地方
第2次的时候是通过 s 指向的地址去修改了里边的值 所以参数引用指向的值也变了
keeya0416 2010-04-07
  • 打赏
  • 举报
回复
LZ你想对了
JAVA里能改变参数的属性值,不能改变参数值
老秋先生 2010-04-07
  • 打赏
  • 举报
回复
我自己推测了一下:
s = “我的心”
的时候 s 已经指向了另外一个地址

真的是这样吗

可是比如 我将代码改为


public class TestAdd {

public static void main(String[] args) {
String[] arrays = { "我的爱" };
Hello1 h = new Hello1(arrays);
System.out.println(arrays[0]);
}
}

class Hello1 {
String s[];

public Hello1(String[] arrys) {
s = arrys;
s[0] = "你的心";
}
}


这时候输出却是 : 你的心


可能真的是这样,但我自己不敢肯定额。。。!



老秋先生 2010-04-07
  • 打赏
  • 举报
回复
我最不想出现的结果是有人告诉我

arrays[0]的值 复制了一份 给 s

晕晕 不是真的是这样吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧