A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文杰 高级黑马   /  2011-11-9 15:44  /  2556 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当一个对象被当作参数传递到一个方法后,那么这个方法就可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 如:
class Person{
private String name;
public String getName() {
        return name;
}
public void setName(String name) {
        this.name = name;
}
public t
publci void Person(Person p){
System.out.println(p.getName());}
}

class PersonTest{
public static void main(String [] args){
Person f=new Person();
f.Person(new Person("efjlife"));
}

}
这个传递属于值传递还是引用传递呢?

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

11 个回复

倒序浏览
方法的参数传递机制只有一种:值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。
回复 使用道具 举报
本帖最后由 郭学文 于 2011-11-9 15:55 编辑

只要是对象就一定是传递引用
不是对象就是值了

你可以测试一下

int test(int x , int[] y)
{
y[0] =2;
return x=1;
}

只return  int x, 你测试一下 y其实不用Return也变了,所以是引用

你不Return Int X 你再看看


你慢慢测试,不用Return也改变的就是引用了



评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
person 方法第一个字母应该是小写。大写看着让人别扭。
我知道答案是值传递。但不知道怎么区分值传递和引用传递。我也借楼主问一个问题,谁能具体解释一下什么叫引用传递?什么叫值传递?这两者有什么区别?
回复 使用道具 举报
风之末端 发表于 2011-11-9 15:51
方法的参数传递机制只有一种:值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任 ...

意思只是一个值传递?实例化一个对象并把一个对象的值传递过去?!如果是这样我就理解了为什么是值传递!
回复 使用道具 举报
属于引用类型,值传递的结果不会改变,引用传递的结果会改变,值传递相当于一个相同的变量,存储到不同的内存中,一个值改变不会不会影响另一个变量的值,而引用传递,是指向同一个存储的对象,改变它的值,其他调用它的值也会改变,

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
海林 黑马帝 2011-11-9 16:02:33
7#
你的程序有需要改写的地方,这样写编译都不能通过。
1 public t是什么?
2 f.Person(new Person("efjlife"));里面的传递的是String    你实际没有这样的构造方法
3 还有就是那个public void Person(Person){...} 这样的方法名有点别扭。容易混淆视听。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
石宗银 黑马帝 2011-11-9 16:20:29
8#
柴亚飞 发表于 2011-11-9 15:52
person 方法第一个字母应该是小写。大写看着让人别扭。
我知道答案是值传递。但不知道怎么区分值传递和引用 ...
  1. public class T1 {
  2.         private int age;
  3.         public static void main(String[] args) {
  4.                 System.out.println("----值传递----");
  5.                 int i = 0;
  6.                 get(i);//只是内部用了 一个值i的副本,
  7.                 System.out.println(i);//原i值不变
  8.                
  9.                 System.out.println("----引用传递----");
  10.                 T1 t1 = new T1();
  11.                 System.out.println(t1);
  12.                 T1 t2 = reference(t1);
  13.                 System.out.println(t2);
  14.                 System.out.println(t1==t2?"t1和t2是同个对象,只是改变了内部的属性值":
  15.                                 "t1和t2不是同个对象,改变了内部属性值,所以对象也变了");
  16.         }
  17.         static void get(int i) {
  18.                 i++;
  19.                 System.out.println(i);
  20.         }
  21.         static T1 reference(T1 t) {
  22.                 t.age = 18;
  23.                 return t;
  24.         }
  25.         public String toString() {
  26.                 return "age:"+this.age;
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
柴亚飞 黑马帝 2011-11-9 16:36:30
9#
石宗银 发表于 2011-11-9 16:20

我现在不方便测试程序,你能把程序的结果输出让我看看吗?
回复 使用道具 举报
海林 黑马帝 2011-11-9 16:38:22
10#
----值传递----
1
0
----引用传递----
age:0
age:18
t1和t2是同个对象,只是改变了内部的属性值




我帮他传一下。
回复 使用道具 举报
崔浩 黑马帝 2011-11-9 17:02:54
11#
值传递就是复制一份,引用传递就是一个指针,地址,是同一个
回复 使用道具 举报
柴亚飞 发表于 2011-11-9 16:36
我现在不方便测试程序,你能把程序的结果输出让我看看吗?

输出结果是:efjlife
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马