java中对象的参数传递都是引用传递?

linyong07 2007-06-01 04:51:24
java中对象的参数传递都是引用传递嘛?没有值传递嘛?能不能给个比较系统的回答,谢谢拉。呵呵。这个搞不是很明白
...全文
1522 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsn09 2010-06-11
  • 打赏
  • 举报
回复
虽然已结贴...
8楼亮点。不多解释。
wangshunflyh 2010-05-15
  • 打赏
  • 举报
回复
函数参数为对象时,当传递对象参数后,改变了引用的指向,但并未改变原对象的值,调用函数结束后,引用还指向原对象。
iloveinru 2007-06-17
  • 打赏
  • 举报
回复
绕来绕去的,看不明白,有什么意义吗?

个人感觉这一块是书里特意不说清楚,说清楚了写书的就没法卖了
GODProbe 2007-06-05
  • 打赏
  • 举报
回复
值类型传值
引用类型传引用

说那么多废话干嘛?
linyong07 2007-06-04
  • 打赏
  • 举报
回复
我提问题可以让自己学到东西也可以让别人学到东西,真是太高兴了.哈哈...大家一起努力啊.
menghuan1985 2007-06-04
  • 打赏
  • 举报
回复
呵呵,学了不会少东西
xiangfeidecainiao 2007-06-04
  • 打赏
  • 举报
回复
vagrant1984(曾因酒醉鞭名马, 生怕情多误美人)
谢谢指点,不过 core java 是不是只有 2本啊, 我在网上 下的时候只有 I 和 II
timbear 2007-06-04
  • 打赏
  • 举报
回复
收益菲浅,感谢楼主提出的问题以及大家的回答!
dyw31415926 2007-06-04
  • 打赏
  • 举报
回复
java只有值传递
大真 2007-06-04
  • 打赏
  • 举报
回复
java:是有两种参数传递,但java只有值传递,没有引用传递。。即便:发生引用传递,那java也会把引用传递变成值传递,传出去。
KevinXie 2007-06-04
  • 打赏
  • 举报
回复
java中 只有两种传递方式,即值传递和引用传递。
所有基本数据类型都是采用值传递的方式,而所有对象都是采用引用传递的方式,包括数组
yyw84 2007-06-04
  • 打赏
  • 举报
回复
LS的说错了吧,change(a);后a的值应该是被改变后的值,方法参数中传递的是对象引用的副本而不是值的副本,也就是说只是传递堆中的拷贝而不是栈中的
Areslp 2007-06-04
  • 打赏
  • 举报
回复
可以看成都是值传递,如果是对象类型,其实是传递的引用的副本,比如:
函数:change(A c){
c=new A();
}
A a=new A();
change(a);
传给change函数的是引用a的副本,所以在函数里改掉a指向的对象以后,并不影像函数外引用a的值,在函数退出后,引用a还是以前的值
Areslp 2007-06-04
  • 打赏
  • 举报
回复
呵呵,我是想说就算是引用类型,传进去的也是副本,有点象c++里指针和指针引用的关系
ownraul 2007-06-04
  • 打赏
  • 举报
回复
要注意String类基本用法,还是很容易想通的
ownraul 2007-06-04
  • 打赏
  • 举报
回复
一楼回答很清楚了,8类基本类型值传递
其他都引用传递
String类的想不清楚再好好想想
DScly 2007-06-04
  • 打赏
  • 举报
回复
楼上的例子不好!
要是这样呢:
 public class Test {

String change(String a){
a=new String("abc");
return a;
}

/**
* @param args
*/
public static void main(String[] args) {
Test t=new Test();
String s=new String("ddd");
//t.change(s);
//System.out.println(s);
System.out.println(t.change(s));
}

}
Areslp 2007-06-04
  • 打赏
  • 举报
回复
to yyw84(乱码人生) ( 二级(初级)):
你可以试试下面的代码
package com;

public class Test {

void change(String a){
a=new String("abc");
}

/**
* @param args
*/
public static void main(String[] args) {
Test t=new Test();
String s=new String("ddd");
t.change(s);
System.out.println(s);
}

}

看看打出来的是abc还是ddd,或许我错误理解了你的意思?
vagrant1984 2007-06-04
  • 打赏
  • 举报
回复
xiangfeidecainiao():
其实java里面争论这个没意思的,我最开始说的就有两种答案,看个人理解,还有你举的那个例子判断hashCode来看地址,我是觉得不对吧。
public class Test {
public static void main (String [] args) {
String s0 = new String ("HAHA");
String s1 = new String ("HAHA");
String z0 = "HAHA";
String z1 = "HAHA";

System.out.println(s0.hashCode());
System.out.println(s1.hashCode());
// 上面的输出是相等的但是 s0 == s1应该是false吧,它们指向的地址是不一样的
System.out.println(z0.hashCode());
System.out.println(z1.hashCode());
// 这个设置到常量池的问题,z0,z1是指向相同的地址(记为A)的,常量创建的时候传给z0,z1的都是
地址A对应的值"HAHA",由于String类是final的,你不能改变z0,z1所对应地址的值,所以如果下面
z1 = "aaa"; 那原先地址A的值"HAHA"是没有改变的,但是现在传个z1的值为"aaa",对应的是另外一个地址B
}
}

好了,咱语文功力比较差,下面那段很绕,建议还是看core java
其实,我不喜欢这种无谓的争论,还是个人的理解了,说的太多反而误导!
ps:写core java是大师吧,你应该看看这本书有多帅?!下次语气缓和点吧,我不喜欢这种带嘲讽的语气,你喜欢?
吴恒 2007-06-04
  • 打赏
  • 举报
回复
Java全是值传递.参考java核心技术上卷.
加载更多回复(16)

62,614

社区成员

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

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