别名 (Aliasing)

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

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

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

引申思考:

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

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

java 定义别名_Java 别名(Aliasing)相关推荐

  1. java定义数组_java定义数组的方法有哪些

    java定义数组的方法有:1.[数组类型[] 数组名 = new 数组类型[数组长度]]:2.[数组类型[] 数组名 = {数组元素}]:3.[数组类型[] 数组名 = new 数组类型[] {数组元 ...

  2. java定义构造方法_JAVA基础学习之路(三)类定义及构造方法

    类的定义及使用 一,类的定义 classBook {//定义一个类intprice;//定义一个属性intnum;public static int getMonney(int price, intn ...

  3. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  4. java 定义方法_java如何定义方法

    所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块.(推荐:java视频教程) 一般情况下,定义一个方法的语法是:[修饰符] 返回值类型 方法名称(参数类型 参数名1,参数类型 参数名2, ...

  5. java定义负数_java定义一个负数

    提示: InsufficientFundsException,NagativeFundsException 为自定义的类,分别产生余额不足异 常和取款为负数异常,需继承 Exception 类. 通过 ...

  6. java定义常量_JAVA中定义常量方法

    JAVA中定义常量方法 (2013-01-28 14:30:19) 标签: it 一.常量定义的基本注意事项. 在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字) ...

  7. java 定义构造器_java的构造器定义以及使用

    构造器,是面向对象所特有的概念,是一种特殊的方法,与对象创建有关 1.构造器没有返回值类型 2.构造器方法名与类名相同,而且可以重载构造器 3.构造器不能手动调用,只能在创建对象时自动调用一次 4.如 ...

  8. java定义子类_java定义类和子类中的方法

    展开全部 你好: 首先是62616964757a686964616fe78988e69d8331333335343337Parents类public class Parents { private S ...

  9. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)

    1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...

最新文章

  1. SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
  2. 关于Win7 内存变小处理方法
  3. 用pycharm写python老是提示错误_python pycharm错误集锦
  4. 【抽象代数】类方程和有限群
  5. 360公司2019秋招空中宣讲会开启,送海量面试直通卡!
  6. JAVA中for循环写杨辉三角_java使用for循环输出杨辉三角
  7. 在Reporting Services (RDL)中自动生成大量列
  8. [Web Chart系列之四] 图形布局-Layout 之js设计实现
  9. Photoshop 操作显示滞后问题及解决方法
  10. FusionChartsFree及其教程
  11. 工程流体力学笔记暂记33 (边界层动量积分方程)
  12. 关于RIGOL可编程电源连接说明(网口连接)
  13. Qt模仿360系统托盘
  14. 三星ml1660拆机图解_三星s6拆机图解介绍
  15. python按字母顺序排列_在python中检查字符串是否按字母顺序排列
  16. 管理角度看莫泊桑《项链》
  17. 微信定位精灵服务器或网络异常,微信定位精灵系统界面无法更新怎么办
  18. anaconda 安装 TensorFlow 过程记录
  19. mosquitto接口流程图
  20. HTML学习笔记~html学习需要准备什么

热门文章

  1. 清理工作区git clean -fd
  2. [转]SEO做关键词的十大分析方法
  3. 实现小程序与SSM后台数据交互
  4. vs 2019 自带 反编译 与 Reflector 反编译工具比较
  5. 异常问题-NXP的Flash锁死后无法烧录
  6. 微软在2022年Gartner云计算AI开发者服务魔力象限中被评为“领导者”
  7. 360视频:金字塔棱台投影TSP
  8. C/C++订餐管理系统
  9. 酷睿是图拉丁的孙子[经典理论]
  10. 思维工具1: SCAMPER