Java中执行e.breite = b.breite -1后b.breite值变更原因咨询
为什么修改
e.breite会导致b.breite的值变化? 嘿,这其实是Java面向对象里对象引用传递的经典问题,刚接触OOP的同学很容易在这里绕晕,我来给你掰明白~
核心原因是:Java里的对象类型变量(比如你的b和e),存储的并不是对象本身,而是指向堆内存中实际对象的引用地址。如果e和b指向的是同一个对象(比如你之前写过e = b;这样的代码),那你通过e修改对象的属性,本质上就是在修改b指向的那个对象的属性——因为它们俩指向的是内存里同一个东西!
举个简单的代码例子帮你理解:
// 假设你的类是类似这样的矩形类 class Rechteck { int breite; } public class Demo { public static void main(String[] args) { Rechteck b = new Rechteck(); b.breite = 5; // 初始化b的宽度为5 Rechteck e = b; // 重点:这里e和b指向同一个对象,不是复制新对象! e.breite = b.breite - 1; // 把共享对象的宽度改成4 System.out.println(b.breite); // 输出4,因为b和e指向的是同一个对象 } }
如果想让修改e.breite不影响b.breite,你需要给e创建一个全新的对象,而不是直接复用b的引用,比如:
Rechteck e = new Rechteck(); // 新建一个独立的对象 e.breite = b.breite - 1; // 这里只是把b的宽度值复制给新对象的宽度 // 此时修改e的属性完全不会影响b,因为它们是两个独立的对象
简单总结下:
- 基本数据类型(int、double等)是值传递,赋值时会复制实际数值,修改其中一个不会影响另一个;
- 对象类型是引用传递,赋值时传递的是对象的内存地址,多个引用指向同一个对象时,修改属性会同步影响所有引用。
内容的提问来源于stack exchange,提问作者Ahmet Zambak
相关产品推荐
相关产品推荐

