java 定义别名_Java 别名(Aliasing)

别名 (Aliasing)

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

db0d28452eed5f0b807ad2f2298025a3.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

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

e7db9485b37aa27ac1678083b3381928.png

引申思考:

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值