Java 别名(Aliasing)
别名 (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 别名(Aliasing)的更多相关文章
- Java是如何处理别名(aliasing)的
什么是Java别名(aliasing) 别名意味着有多个别名指向同一个位置,且这些别名有不同的类型. 在下面的代码例子中,a和b是两个不同的名字,有不同的类型A和B,B继承A B[] b = new ...
- 图说Java —— 理解Java机制最受欢迎的8幅图
原文链接: Top 8 Diagrams for Understanding Java 翻译人员: 铁锚 翻译时间: 2013年10月29日 世间总是一图胜过千万言! 下面的8幅图来自于 Progr ...
- Java对象引用处理机制
翻译人员: 铁锚 翻译时间: 2013年11月13日 原文链接: How does Java handle aliasing? 什么是Java的引用别名机制 Java的引用别名机制(原文为Aliasi ...
- 【转载】C++ 与“类”有关的注意事项总结(十二):按成员初始化 与 按成员赋值
原文:C++ 与"类"有关的注意事项总结(十二):按成员初始化 与 按成员赋值 一.按成员初始化(与构造函数和拷贝构造函数有关) 用一个类对象初始化另一个类对象,比如: Accou ...
- 《think in python》学习-10
think in python 10 列表 和字符串相似,列表是值得序列.在列表中,它可以是任何类型,列表中的值成为元素,有时也称为列表项 s = [10,20,30,40] print s #列表也 ...
- C++ Primer 与“类”有关的注意事项总结
C++ 与"类"有关的注意事项总结(一) 1. 除了静态 static 数据成员外,数据成员不能在类体中被显式地初始化. 例如 : class First { int memi = ...
- words2
餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java方法调用中的别名处理
将一个对象传递到方法内部时,也会产生别名现象.//: PassObject.java// Passing objects to methods can be a bit tricky62class L ...
随机推荐
- table标签中thead、tbody、tfoot的作用
为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析HTML时,table是作为一个整体解释的,使用tbody可以优化显示.如果表格很长,用tbody分段,可以一部分一部分地显示, ...
- [LeetCode]Integer Break(Dp或胡搞或推公式)
343. Integer Break Given a positive integer n, break it into the sum of at least two positive intege ...
- mysql数据库开始——增删改
注释语法:#注释语 一.T-SQL语句注意:1.语句写完后用“分号:”代表这一句结束2.列结束用逗号,最后一列写完不用写逗号3.符号一定是英文的 关键字:主键:primary key外键:foreig ...
- 通过 Composer Github Packagist制作发布共享PHP包
参考来源: https://laravel-china.org/topics/1002 https://rivsen.github.io/post/how-to-publish-package-to- ...
- Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...
- HAproxy健康检查的三种方式
1.通过监听端口进行健康检测 .这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用. 配置示例: listen http_proxy mode http cooki ...
- FastCGI超过活动超时时间
线上环境:PHP5.4 and IIS 打开IIS管理器,找到FastCGI,打开后编辑选项 活动超时默认为70(秒) 请求超时默认为90(秒) 可根据项目需求来更改这两项的值
- JAVA基础知识(2)--堆栈和递归的操作
2015-07-26 18:16:21/***该应用程序对堆栈和递归方法进行实例操作: *1.堆栈操作:先进后出,*2.递归方法:直接或者调用自己的方法:*@author lhm *Email:912 ...
- shell 之时间戳
vim 1.sh #/bin/bash##by cc read -p "Please input yourtime:" timea=$timeif [ $a != 0 ] then ...
- /bin/sh^M: bad interpreter:解决办法
xcode编译时有时候遇到/bin/sh^M: bad interpreter:没有那个文件或目录这样的错误 可以用以下方式解决 先在控制台cd到报错的目录 vi xxx.sh(报错的那个文件):se ...