对象的赋值和变量赋值的区别(图解)

我们先写一个电话类,然后用手机1和手机2看对象的传递

public class Phone {
    String brand;
    double price;
    String color;
    void call(String call){
        System.out.println("打电话给"+call+".");
    }
}

然后我们 new 3个对象实验一下

public class PhoneOne {
    public static void main(String[] args) {
        Phone One = new Phone();     //手机对象1
        One.brand = "iphone";
        One.color = "绿色";
        One.price = 5999.0;

        Phone tow  = One;        //手机对象2
        System.out.println(tow.color);//绿色
        System.out.println(One.color);//绿色        传递的值很正常
        tow.color = "黑色";            //       改一下tow的颜色
        System.out.println(tow.color);//黑色
        System.out.println(One.color);//黑色     我们发现one的颜色也变啦
        System.out.println(tow);//day1.Phone@65ab7765     但是他们地址值一样
        System.out.println(One);//day1.Phone@65ab7765     说明改变的是堆中的全局变量值
        Phone three = new Phone();
        three.color = "不灵不灵的颜色";   //不灵不灵的颜色
        System.out.println(three.color); //day1.Phone@3a71f4dd  发现地址值也不一样
        System.out.println(three);       //***所以new一次,堆中存一组全局变量.one和tow只new了一次所以他们其实是一个对象.***//
        PhoneOne.method(One);

    }

重点:“所以new一次,堆中存一组全局变量.one和tow只new了一次所以他们其实是一个对象
所以每个需要使用的对象都要new出来,不能通过赋值传递来初始化多个变量
内存图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值