美文网首页
Java基础之运算符——对象赋值

Java基础之运算符——对象赋值

作者: 一生鎻愛 | 来源:发表于2018-09-27 14:37 被阅读0次

猜猜下面代码中第三行输出的t2.level是多少呢?

public class Tank {

    private int level;
    
    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = 9;
        t2.level = 19;
        System.out.println("t1.level=" + t1.level + ",t2.level="  + t2.level);
        t1 = t2;
        System.out.println("t1.level=" + t1.level + ",t2.level="  + t2.level);
        t1.level = 29;
        System.out.println("t1.level=" + t1.level + ",t2.level="  + t2.level);
    }

}

运行结果

t1.level=9,t2.level=19
t1.level=19,t2.level=19
t1.level=29,t2.level=29

我们期望是t1t2是相对独立的,但结果是我们修改了t1的值之后,t2的值也跟着变了,原因是t1 = t2这句话并不是将t2的值赋值给t1,而是将t2这个对象引用赋值给了t1,也就是说此时t1t2指向了相同的对象。
这种特殊现象通常称作别名现象,是java操作对象的一种基本方式,那么如何才能避免这个样的问题呢?

t1.level = t2.level;

这样就能保持两个对象的独立,而不是将t1t2绑定到相同的对象。
还有下面这种情况也属于别名问题

public class Letter {

    char c;
    
    static void f(Letter y) {
        y.c = 'z';
    }
    
    public static void main(String[] args) {
        Letter x = new Letter();
        x.c = 'a';
        System.out.println("x.c : " + x.c);
        f(x);
        System.out.println("x.c : " + x.c);
    }
}

运行结果

x.c : a
x.c : z

相关文章

  • Java基础之运算符——对象赋值

    猜猜下面代码中第三行输出的t2.level是多少呢? 运行结果 t1.level=9,t2.level=19t1....

  • Java基础知识3

    Java基础知识3 运算符 Java语言支持如下运算符 算术运算符:+,-,*,/,%模,取余数,++,-- 赋值...

  • JAVASE-DAY03

    一、基础纲要: 运算符 1.赋值运算符 1.1基本赋值运算符: = java中唯一个自右向左运算的符号 1....

  • js运算符

    js基础语法:运算符,判断语句,数据类型,js对象 一、运算符 赋值运算符 =算数运算符 +-*/% ++...

  • Java基础随记1

    Java基础随记 赋值运算符 比较运算符 逻辑运算符 条件运算符 条件运算符( ? : )也称为 “三元运算符”。...

  • Java 基础 之 赋值运算符

    http://www.verejava.com/?id=16992591185213 http://www.ver...

  • Dart运算符、表达式、类型转换

    Dart运算符: 算术运算符 关系运算符 逻辑运算符 赋值运算符1、基础赋值运算符 2、复合赋值运算符 条件表达式...

  • 5.PHP入门-语法概述(五)运算符

    PHP 算数运算符 PHP 赋值运算符 PHP 赋值运算符用于向变量传值。PHP 中基础的赋值运算符是 "="。这...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • es6

    let && const 解构赋值&剩余运算符&展开 解构赋值 对象的解构赋值 剩余运算符 展开 Object.d...

网友评论

      本文标题:Java基础之运算符——对象赋值

      本文链接:https://www.haomeiwen.com/subject/xvceoftx.html