You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:11:50