java中方法可以修改对象引用作为参数的状态。这句话如何理解?

一个书中的例子:public void static tripleSalary(Employee x){x.raiseSalary(200);}然后当调用这个方法时:harry = new Employee();tripleSalary(harry);注释:1、x被初始化harry的一个拷贝,是一个对象的引用;2、raiseSalary应用于这个对象引用,x和harry同时引用的那个Emp对象的雇员薪金被增200%;3、方法结束后,参数变量x不再使用,对象变量harry继续引用那个薪金增值三倍的雇员对象;问题出来了:我在这个程序中,都没有看见,方法的参数中,对象引用的状态或者是指向对象引用的参数值被改变了。tripleSalary方法后的Employee类和后面调用harry的harry =new Emp(...);的Employee类是同一个类吗?

就是引用对象传参,传到函数里边你在函数里修改它,实参也会变

比如数组是引用对象吧
void foo(int[] a)有这么一个函数,你在函数体里a[0] = 3;

然后其他地方调用foo
int[] a = new int[]{1,2,3,4};
foo(a);
// 到这里结果a[0]就变成3了

你例子里的x和harry你可以看作是一个指代,它们两指向同一快内存,在函数里x修改了它指向的地方,也就相当于harry指向的地方被修改了

下面->表示指向,比如a->xxx,a指向xxx这块内存

a -> Employee(A)
b -> Employee(B)

传参到swap里
a = x -> Employee(A)
b = y -> Employee(B)
swap结束时
b = x -> Employee(B)
a = y -> Employee(A)
也就是说,swap只是交换x和y的引用,它们两引用的对象被交换了,然后x和y是swap内部的局部变量,函数结束就over了
对调用者传入的a和b没有实质上的改变
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-11
java 方法的传递都是值传递,也就是说,无论是基本类型还是对象类型,都会产生一个拷贝,唯一不同的是基本数据类型,拷贝的是值对象数据类型,拷贝的对象的内存地址public static void swap(Employee x,Employee y){Employee temp = x; //现在x,a都指向同一个对象x = y;y = temp;}所以x,y的交换不会影响的a,b的指向
第2个回答  2018-03-14
类肯定是同一个类,你是没弄明白类和对象的区别吧,这个方法传入的是一个类的对象,方法里面修改就是传入的对象,方法执行完这个对象的值就被修改了。在这个过程中,对象的内存地址没有变,也就是说,对象还是那个对象。
第3个回答  2019-12-22
他们是指向同一个地址的引用,两个引用都指向创建的harry=new
Employee()这个new的对象,所以,对于对象传递来说,引用所指向的实际对象的值肯定会发生变化,这是对象引用的传递,和基本类型的值传递是不一样的!
第4个回答  2018-07-02
你看的是java核心技术卷1吧,好像是第4章的内容。
这里的这句话
“java中方法可以修改对象引用作为参数的状态“
意思是:
这里的“参数的状态”其实说的是对象的field的值,也就是可以改变对象内部的属性field值。
很多时候看不懂是因为翻译的问题,这里我给出英文版的翻译,自己体会一下:
• A method cannot modify a parameter of primitive type (that is, numbers or boolean
values).
• A method can change the state of an object parameter.// 这里的state其实翻译成状态我觉得误导性很强,不如翻译成属性好一点
• A method cannot make an object parameter refer to a new object.
-----------------------------------------------
其实这句话看了这句话下面的例子就应该知道这里的state指的是属性
相似回答