Java 别名(Aliasing)

作者: 不忘初心2017 | 来源:发表于2017-03-28 22:39 被阅读397次

别名 (Aliasing)

别名,顾名思义,是有别于现在名字的另一个名字,但指的是不是同一个人或事物呢?比如,你上学的时候同学有没有给你起什么外号?如果有的话,你的名字和同学给你起的外号是不是都指的是你自己?肯定是的哦。

Paste_Image.png

Java中的别名亦类似,Java 给某个变量起别名,其实就是赋语句(Assignment Statement,如 b = a),只是这里的** 值 ** 要视情况而定。

一般分两种情况:

1。基本数据类型 (Primitive Type):这个是真正的赋值。
2。引用类型 (Reference Type):这个则是复制一份引用。

让我们分别开看一下。

基本数据类型 (Primitive Type)

if x and y are variables of a primitive type, then the assignment of y = x copies the value of x to y.
如果 x 和 y 是基本数据变量,那么赋值语句 y = x 是将 x 的 复制给 y。

这个比较好理解,代码示例:

        int a = 2;
        int b = a;
        int c = 2;
        System.out.println("a: "+ a);
        System.out.println("b: "+ b);
        System.out.println("c: "+ c);
        System.out.println("a == b is: " + (a==b));
        System.out.println("a == c is: " + (a==c));

运行结果:

a: 2
b: 2
c: 2
a == b is: true
a == c is: true

引用类型(Reference Type)

For reference types, the reference is copied (not the value)
对于引用类型的 x 和 y,y = x 表示将 x 的 引用复制一份给 y (不是 x 的哦)

比如,给定一个数组 a,给它起一个别名 b(b = a),二者其实都指向 a 所指向的同一个对象。

代码演示:

        int[] a = {1,2,3};
        int[] b = a;
        int[] c = {1,2,3};
        System.out.println("a: "+ a);
        System.out.println("b: "+ b);
        System.out.println("c: "+ c);
        System.out.println("a == b is: " + (a==b));
        System.out.println("a != c is: " + (a!=c));

运行结果可以看出,b 是 a 的 别名,a 和 b 指向的是同一对象地址(1218025c),a 和 c 则不同。

a: [I@1218025c
b: [I@1218025c
c: [I@816f27d
a == b is: true
a != c is: true

在内存中的位置大概是这样的:


Paste_Image.png

引申思考:

1。Java 中数组有个clone()方法,比如 b = a.clone(); 这与前面的 b=a 是否一样?为什么?

2。Java 别名的设计目的是什么?

相关文章

  • Java 别名(Aliasing)

    别名 (Aliasing) 别名,顾名思义,是有别于现在名字的另一个名字,但指的是不是同一个人或事物呢?比如,你上...

  • 2018-11-06 gensim安装错误

    错误提醒:UserWarning: detected Windows; aliasing chunkize to ...

  • Anti-aliasing

    中文译作抗锯齿,当然抗锯齿不止可以用后处理来实现,一般显卡里也自带了硬件抗锯齿。抗锯齿是用于防止锯齿的一系列算法,...

  • 全局配置文件-TypeAliases-别名

    typeAliases:为某个java类型起别名-->属性1)type:指定要其别名的类型全名称,默认别名就是类名...

  • The rational of mipmapping

    (lecture by TomK) 1. quality anti-aliasing: think of Nyqu...

  • Java学习day-60:MyBatis框架(2)

    一、MyBatis中标签和属性的配置: 1.TypeAliases标签配置别名: 用于给 java 类型定义别名,...

  • mybatis标签配置

    TypeAliases 别名 类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余...

  • unity中_GrabTexture抓屏特效颠倒

    现象 在未使用anti-aliasing的quality(fastest, fast, simple) 下, 且没...

  • Java中的别名问题

    运行结果 对每个Tank类对象的level域都赋予了一个不同的值,然后,将t2赋给t1,接着又修改t1。在许多编程...

  • JAVA中的别名现象

    问题的提出: 在java中,对基本数据类型的赋值时,是将数据从一个地方复制到另外一个地方,当a=b时,将b的内容...

网友评论

  • 1ebf449b9f76:谢谢分析,这个知识点我试着理解了很久。

本文标题:Java 别名(Aliasing)

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