`
phoenix007
  • 浏览: 431065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java引用类型赋值问题

阅读更多

先看个实例吧:

 

	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引用的同一个对象实体。

分享到:
评论
2 楼 talentkai 2010-08-19  
talentkai 写道
talentkai 写道

talentkai 写道

talentkai 写道

talentkai 写道
s

1 楼 talentkai 2010-08-19  

相关推荐

    值类型和引用类型的区别

    似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%. 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有...

    Java程序设计基础:创建String字符串.pptx

    一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用呢? 引入 例如 “320106199503150101” String类:连接、查找、比较等 引入 String是Java库...

    Java虚拟机(四)——Java引用对象4种类型

    Java的4种引用类型: 他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被 GC回收的可能性从小到大排列。 强引用(StrongReference) 只要强引用...

    java的传值与传引用详解

     Java 是传值还是传引用,问题主要出在对象的传递上,因为 Java 中简单类型没有引用。既然争论中提到了引用这个东西,为了搞清楚这个问题,我们必须要知道引用是什么。  简单的说,引用其实就像是一个对象的名字...

    Java基础知识之数据类型和操作符

    Java的数据类型可以分为两类:基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double和char,它们代表了不同的数值类型。引用数据类型包括类、接口和数组,它们可以用来创建更复杂的...

    Java Scanner 类.pdf

    引用数据类型与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有相对固定的步骤或格式: 数据类型 变量名 = new 数据类型(); Scanner input = new Scanner(System.in); 每种引用数据类型都有其功能,可以...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

    Java最全面试题200道

    2.对于引用类型,==比较的是地址; 3.equals不能用于基本类型的比较; 4.如果没有重写equals,equals就相当于==; 5.如果重写了equals方法,equals比较的是对象的内容; 3、final 在 java 中有什么作用? (1)用来...

    head first java

    对象的声明与赋值 可回收堆空间 数组 习题 4 对象的行为 操作对象状态的方法 方法参数与返回类型 值传递 Getters与Setters 封装 数组中的引用 习题 5 超强力方法 创建战舰游戏 简单版 编写伪码 测试 编写程序 完成版...

    Thinking in java4(中文高清版)-java的'圣经'

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

    这些是Java语法和基本概念的核心内容 熟悉和理解这些概念将为您编写和理解Java程序打下坚实基础

    3. **数据类型**:Java提供了两种数据类型:原始数据类型和引用数据类型。原始数据类型包括整数类型、浮点类型、字符类型和布尔类型。引用数据类型包括类、接口、数组等。 4. **运算符**:Java提供了各种运算符,...

    疯狂JAVA讲义

    4.6.3 引用类型数组的初始化 96 4.6.4 没有多维数组 99 学生提问:我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样不可以扩展成三维数组吗?甚至扩展到更多维的数组? 101 4.6.5 操作数组的工具...

    开发java程序知识点归纳

    引用数据类型 自动转换, 强制转换, 数组基本用法, 求数组中的最大最小值, 数组元素排序, 在数组中插入元素, if结构 1、基本if结构: 2、if-else结构, 3、多重if结构, 4、嵌套if结构: switch结构 循环...

    初级Java程序员面试题

    对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equals,equals就相当于==; 如果重写了equals方法,equals比较的是对象的内容; final 在 java 中有什么作用? final修饰的成员...

    java开发面试题及答案

    除了基本类型外,其他数据类型都属于引用类型,包括类、接口、数组等。 Q2:float number=3.4;有没有问题?为什么? 答:有问题,因为3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型,...

    《Java和Android开发实战详解》第2到5章源代码-by 南邮-陈杨

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

    [java]读书笔记整理:一切都是对象

    [后续在说,在程序执行过程中,怎样传递和赋值对象引用]。 事实证明,由new创建的对象,只要你需要,就会一直保留下去。这样。许多C++编程问题在java中就完全消失了,在C++中,最难的问题似乎在于:程序员并不能从...

    记录所有有关java的学习笔记.rar

    引用数据类型:数组,类,接口 2.1 char :Unicode编码的字符,或字符的整数编码,必须用单引号 float默认值是0.0f; double默认值是0.0d; 2.2基本类型字面值规则 1.整数字面值是int类型,如果右侧赋值超出int...

    Java的六大问题你都懂了吗

     所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null.对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。...

    java 编程入门思考

    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 运算符常规操作...

Global site tag (gtag.js) - Google Analytics