哪位高人帮我解释下 传值 传址区别

LKJLKDJFLKSJDFKD 2010-01-16 03:00:30
7. 写出以下程序打印结果(注意换行)

class Test6 {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

public class Main {
public static void main(String[] args) {
Test6 a = new Test6();
a.setName("Hello");
Test6 b = new Test6();
b.setName("world");
System.out.println("before swap: " + "a=" + a.getName() + "; b="+ b.getName());
swap(a, b);
System.out.println("after swap: " + "a=" + a.getName() + "; b="
+ b.getName());
}

private static void swap(Test6 a, Test6 b) {
Test6 temp = a;
a = b;
b = temp;
System.out.println("swaping: a=" + a.getName() + ";
b="+ b.getName());
}
}
执行以上程序结果是:
...全文
181 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhk 2010-01-17
  • 打赏
  • 举报
回复
java只有传值,但是引用的值其实就是地址。可以通过地址影响到传入之前的值。普通的值是传入的复制品。
2到20个英文 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weidong777 的回复:]
同意2楼
Java对于基本数据类型的传递都是传值,对于其他的类对象都是传引用。
若想对基本数据类型传引用,必须用类封装它们。Java为我们提供了方便的与基本数据类型对应的类:Integer,Double····可以查看JavaAPI。
这真是Java面向对象的特点之一!
[/Quote]

第一 java 是值传递
第二 Integer,Double...是final 类型,是不可变的
呵呵
bobo364 2010-01-16
  • 打赏
  • 举报
回复
貌似java没有传址吧,因为java是不能直接操作内存的
hugogoo 2010-01-16
  • 打赏
  • 举报
回复
顶一下
jayqean 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cangyingzhijia 的回复:]
java里面只有值传递,而所谓的引用传递,传进去的只是和对象关联的地址值,传进去的同样是个值,没有c++、c上说的那种引用
所以在楼主的代码中swap(a, b); 传进去的和a、b关联的地址值,而对于里面的交换并不该写a、b的值,所以在swap外面a、b还是原来的值。如果是引用传递的话,比如在c++中可以这样声明函数:
void swap(Test6 &a, Test6 &b)
这样的话在c++中一定会改变a、b的值,因为它们是引用
所以一句话java中是靠值传递的
[/Quote]
楼上说得对呀,引用也只是将地址当作值传递,如果学了C#,对比下,会更好,如果在C#中按LZ那样只有加上ref才真正将值改了
garysoft 2010-01-16
  • 打赏
  • 举报
回复
java是只有值传递的..传引用还是传值都是值来的..引用的值就是堆中对象的地址..
苍蝇①号 2010-01-16
  • 打赏
  • 举报
回复
java里面只有值传递,而所谓的引用传递,传进去的只是和对象关联的地址值,传进去的同样是个值,没有c++、c上说的那种引用
所以在楼主的代码中swap(a, b); 传进去的和a、b关联的地址值,而对于里面的交换并不该写a、b的值,所以在swap外面a、b还是原来的值。如果是引用传递的话,比如在c++中可以这样声明函数:
void swap(Test6 &a, Test6 &b)
这样的话在c++中一定会改变a、b的值,因为它们是引用
所以一句话java中是靠值传递的
Akon90 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thefirstz 的回复:]
int get(int i){...} —— 这是传值,通过复制i的值传进去
int get(Object o){...} —— 这是传引用,通过类的引用使用参数传递
[/Quote]恩。
weidong777 2010-01-16
  • 打赏
  • 举报
回复
同意2楼
Java对于基本数据类型的传递都是传值,对于其他的类对象都是传引用。
若想对基本数据类型传引用,必须用类封装它们。Java为我们提供了方便的与基本数据类型对应的类:Integer,Double····可以查看JavaAPI。
这真是Java面向对象的特点之一!
昵称很不好取 2010-01-16
  • 打赏
  • 举报
回复
int get(int i){...} —— 这是传值,通过复制i的值传进去
int get(Object o){...} —— 这是传引用,通过类的引用使用参数传递
bolink5 2010-01-16
  • 打赏
  • 举报
回复
值、地址传值在C和c++上是分的很清楚的
LZ 写的是java代码,在java中应只有值传推。因为java封装了c或者c++的指针。

62,620

社区成员

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

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