先看个实例吧:
public static void main(String[] args) {
NewsJob job = new NewsJob();
job.setId(UUIDGenerator.getUUID());
System.out.println(job.getId());
NewsJob job2 = job;
job2.setId("asdf");
System.out.println(job.getId());
System.out.println(job2.getId());
}
输出结果为:
4adc3123c1d94e63a57c30b4bd9884a9
asdf
asdf
原理:
有两个实例A、B,要实现把B的值赋给A,大部分初学者会想到A=B,没错,进行这个操作以后,实例A、B包含的值是相同的,不过实际上却与我们期望的有所差异。我们知道A、B是实例句柄,而对象的实际数据是保存在内存堆中,在Java中执行A=B,实际上是把句柄B的值赋给句柄A,用C的说法就是,把指针B赋给指针A。OK,现在我们明白了,其实句柄A原来引用的对象已经失去了,再没法找回,句柄A、B已经引用到同一个内存堆的对象上去了,当然实例A、B是相同的,而句柄A原来引用的对象所占用的内存就靠GC来回收了。
现在我们如果修改实例A的数据成员的值,同样实例B的相应数据成员也会被修改成同样的值,这很容易理解,因为实例A、B引用的同一个对象实体。
分享到:
相关推荐
似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%. 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有...
一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用呢? 引入 例如 “320106199503150101” String类:连接、查找、比较等 引入 String是Java库...
Java的4种引用类型: 他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被 GC回收的可能性从小到大排列。 强引用(StrongReference) 只要强引用...
Java 是传值还是传引用,问题主要出在对象的传递上,因为 Java 中简单类型没有引用。既然争论中提到了引用这个东西,为了搞清楚这个问题,我们必须要知道引用是什么。 简单的说,引用其实就像是一个对象的名字...
Java的数据类型可以分为两类:基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double和char,它们代表了不同的数值类型。引用数据类型包括类、接口和数组,它们可以用来创建更复杂的...
引用数据类型与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有相对固定的步骤或格式: 数据类型 变量名 = new 数据类型(); Scanner input = new Scanner(System.in); 每种引用数据类型都有其功能,可以...
localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...
2.对于引用类型,==比较的是地址; 3.equals不能用于基本类型的比较; 4.如果没有重写equals,equals就相当于==; 5.如果重写了equals方法,equals比较的是对象的内容; 3、final 在 java 中有什么作用? (1)用来...
对象的声明与赋值 可回收堆空间 数组 习题 4 对象的行为 操作对象状态的方法 方法参数与返回类型 值传递 Getters与Setters 封装 数组中的引用 习题 5 超强力方法 创建战舰游戏 简单版 编写伪码 测试 编写程序 完成版...
2.8.2 语法 2.8.3 嵌入式HTML 2.8.4 一些标签示例 2.8.5 文档示例 2.9 编码风格 2.10 总结 2.11 练习 第3章 操作符 3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 3.4 赋值 3.4.1 方法调用中的别名问题 3.5 ...
3. **数据类型**:Java提供了两种数据类型:原始数据类型和引用数据类型。原始数据类型包括整数类型、浮点类型、字符类型和布尔类型。引用数据类型包括类、接口、数组等。 4. **运算符**:Java提供了各种运算符,...
4.6.3 引用类型数组的初始化 96 4.6.4 没有多维数组 99 学生提问:我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样不可以扩展成三维数组吗?甚至扩展到更多维的数组? 101 4.6.5 操作数组的工具...
引用数据类型 自动转换, 强制转换, 数组基本用法, 求数组中的最大最小值, 数组元素排序, 在数组中插入元素, if结构 1、基本if结构: 2、if-else结构, 3、多重if结构, 4、嵌套if结构: switch结构 循环...
对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equals,equals就相当于==; 如果重写了equals方法,equals比较的是对象的内容; final 在 java 中有什么作用? final修饰的成员...
除了基本类型外,其他数据类型都属于引用类型,包括类、接口、数组等。 Q2:float number=3.4;有没有问题?为什么? 答:有问题,因为3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型,...
3.3 Java的数据类型 40 3.3.1 整数类型 41 3.3.2 浮点型 42 3.3.3 布尔型 43 3.3.4 字符型 43 3.4 Java的表达式 45 3.4.1 运算符的优先级 46 3.4.2 算术运算符 46 3.4.3 递增和递减运算 48 3.4.4...
[后续在说,在程序执行过程中,怎样传递和赋值对象引用]。 事实证明,由new创建的对象,只要你需要,就会一直保留下去。这样。许多C++编程问题在java中就完全消失了,在C++中,最难的问题似乎在于:程序员并不能从...
引用数据类型:数组,类,接口 2.1 char :Unicode编码的字符,或字符的整数编码,必须用单引号 float默认值是0.0f; double默认值是0.0d; 2.2基本类型字面值规则 1.整数字面值是int类型,如果右侧赋值超出int...
所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null.对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。...
3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作...