Java 别名(Aliasing)

别名 (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 别名的设计目的是什么?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,246评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,834评论 18 399
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,060评论 0 3
  • 55
    16de687f9f78阅读 136评论 0 3
  • 世界之大,偏方无奇不有。除了“包”治百病、口红续命以外,“砖”也能治疑难杂症。尤其备受吐槽的直男癌的热水,感冒了喝...
    本泼猴阅读 4,692评论 0 2