`
wangcb80
  • 浏览: 20699 次
  • 性别: Icon_minigender_1
  • 来自: 呼伦贝尔
最近访客 更多访客>>
社区版块
存档分类
最新评论

对象之间的赋值

阅读更多

 

赋值使用等号操作符“=”。它的意思是“取得右边的值(通常称为右值),把它复制给左边(通 常称为左值)”。右值可以是任何常数、变量或者表达式(只要它能生成一个值就行)。但左值 必须是一个明确的、已命名的变量。也就是说,它必须是一个物理空间以存储等号右边的值。

 

对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非指向一个对象的引用, 所以在其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如,对基本数据类型使 用“a=b”,那么b 的内容就复制给a,若接着又修改了a,那么b 根本不会受这种修改的影响。

 

为“对象”赋值的时候,情况却不是这样了。对一个对象进行操作时,我们真正操作的是对对象 的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一 个地方。这意味着假若对对象使用“c = d”,那么cd都指向原本只有d指向的那个对象

 

 

class Tank{
	int level;
}

public class Assignment {
	public static void main(String args[]){
		Tank t1 = new Tank();
		Tank t2 = new Tank();
		t1.level=19;
		t2.level=40;
		System.out.println("t1.level:"+t1.level+"; t2.level:"+t2.level);
		t1=t2;
		System.out.println("t1.level:"+t1.level+"; t2.level:"+t2.level);
		t1.level=27;
		System.out.println("t1.level:"+t1.level+"; t2.level:"+t2.level);
	}
}///:~output
t1.level:19; t2.level:40
t1.level:40; t2.level:40
t1.level:27; t2.level:27

 由于“t1 = t2”操作的是一个对象的引用,这种现象通常称作“别名现象”,是java操作对象的一 种基本方式。在这个例子中如果想避免别名现象,可以这样写:

                                                  t1.level = t2.level

分享到:
评论

相关推荐

    C++中对象的赋值与复制操作详细解析

    本来赋值运算符“=”只能用来对单个的变量赋值,现在被扩展为两个同类对象之间的赋值,这是通过对赋值运算符的重载实现的。 实际上这个过程是通过成员复制来实现的,即将一个对象的成员值一一复制给另外一个对象的...

    C++对象赋值_Project.rar

    在C++编程中,对象赋值是一个至关重要的概念,它涉及到类的实例之间的数据复制以及深拷贝和浅拷贝的区别。"C++对象赋值_Project"可能是一个教学项目,旨在帮助学生理解并实践C++中的对象赋值机制。在这个项目中,...

    Java实例高难度面试题及解析 - 展现你的编程实力!

    5. **对象赋值**:对象之间赋值使用`=`, 如`Object obj1 = new Object(); Object obj2 = obj1;`,此时obj1和obj2指向同一个对象。 6. **浅拷贝与深拷贝**: - 浅拷贝:仅复制对象引用,不复制对象本身。 - 深拷贝...

    反射实现两个类的对象之间相同属性快速赋值,数据源实体和目标实体将进行转换

    反射实现两个类的对象之间相同属性快速赋值,MapperToModel,数据源实体和目标实体将进行转换

    浅谈C++中对象的复制与对象之间的相互赋值

    在C++编程中,对象的复制与对象之间的相互赋值是至关重要的概念,尤其是在处理大量对象实例时。这里我们将深入探讨这两个主题。 首先,我们来理解对象的复制。当需要创建一个与现有对象具有相同属性的新对象时,就...

    C++知识点学习

    - **赋值运算符**:用于已存在的对象之间赋值操作。 #### 八、拷贝构造函数的调用场景 拷贝构造函数主要在以下几种情况下被调用: 1. 使用一个对象初始化另一个对象。 2. 函数参数是类的对象时,在函数调用过程中...

    C#两个相同属性的类赋值方法

    最近有遇到两个类之间的赋值问题,两个类的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个类的属性的值赋值给另一个类。 框架是.net 4.5 public static D Mapper(S s) { D d = Activator...

    operator=赋值检测学习

    在类的对象之间,默认的赋值运算符执行浅复制,这意味着对象的数据成员会被逐个复制。但这样可能会导致问题,比如当对象包含指针或动态分配的内存时,浅复制可能导致两个对象共享同一块内存,从而引发意外的结果。 ...

    ES6知识点整理之对象解构赋值应用示例

    解构赋值的基本形式是通过花括号 `{}` 来指定变量和对象属性之间的对应关系。例如: ```javascript var {name} = { name:'Joh', age:10}; ``` 这行代码会将对象 `{name: 'Joh', age: 10}` 的 `name` 属性值赋给...

    C++实现三维动态数组,赋值,加减乘算法,适用于三维空间对象之间的运算实现

    C++实现三维动态数组,赋值,加减乘算法,适用于三维空间对象之间的运算实现。 3DArray.zip └── 3DArray ├── 3DArray.dsp ├── 3DArray.dsw ├── 3DArray.ncb ├── 3DArray.opt ├── 3DArray.plg ├─...

    如何使用BeanUtils.copyProperties进行对象之间的属性赋值

    在Java开发中,数据对象之间的属性赋值是一个常见的任务,特别是在处理业务逻辑时。Spring框架提供的`BeanUtils.copyProperties`方法极大地简化了这个过程。本文将深入探讨如何使用`BeanUtils.copyProperties`进行...

    java不同对象之间及集合的复制

    这里的“java不同对象之间及集合的复制”主要关注如何高效且便捷地完成对象及其集合的复制工作,避免繁琐的手动赋值。描述中提到的“model VO值复制注解”提供了一种自动化的方法,使得复制过程更加简洁和灵活。 1....

    C++派生类与基类的转换规则

    基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替。 具体表现在以下几个方面: 派生类对象可以向基类对象赋值...

    delphi事件赋值操作

    在Delphi编程中,事件(Events)是一种特殊的函数指针,用于传递方法或者回调机制,使得对象之间可以进行通信。事件赋值操作是Delphi中一个重要的概念,它允许我们动态地将一个方法绑定到特定的事件上。下面将详细...

    Java实现不同的类的属性之间相互赋值

    Java实现不同的类的属性之间相互赋值 在 Java 中,实现不同的类的属性之间相互赋值是一种非常常见的操作,特别是在读写数据库的时候。这篇文章将讲解如何使用 Java 实现不同的类的属性之间相互赋值。 在开发过程中...

    JavaScript对象引用与赋值实例详解

    最后,如果我们对引用的对象赋值为 `null` 或其他非引用类型,那么原来的引用关系会被切断,相互之间不再有影响。例如: ```javascript var arr = {"a":"1","b":"2"}; var arr1 = arr; arr = {}; // 这里切断了arr...

    Java面向对象(基础)- 属性赋值过程、JavaBean和UML类图

    UML(统一建模语言)类图是软件设计中用于表示类、接口、继承关系以及对象之间关系的图形表示。在类图中,我们可以看到以下元素: - 类名:用矩形表示,包含类的名称。 - 属性:在类名下方列出,表示类的成员变量,...

    java对象和对象的引用之间的关系

    ### Java对象和对象的引用之间的关系 #### 一、Java对象和对象的引用的基本概念 在Java编程语言中,理解对象和对象引用之间的关系是非常重要的基础。对象是类的一个实例,而对象引用则是用于访问该对象的一种手段...

    asp.net中实体类对象赋值到表单的实现代码

    利用反射技术,可以高效地实现实体类对象与表单之间的赋值操作,尤其是在处理大量数据时显得非常省事。 首先,我们来看反射(Reflection)技术。反射是在运行时获取程序集信息、加载和实例化类型以及调用其成员(如...

Global site tag (gtag.js) - Google Analytics