赋值使用等号操作符“=”。它的意思是“取得右边的值(通常称为右值),把它复制给左边(通
常称为左值)”。右值可以是任何常数、变量或者表达式(只要它能生成一个值就行)。但左值
必须是一个明确的、已命名的变量。也就是说,它必须是一个物理空间以存储等号右边的值。
对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非指向一个对象的引用, 所以在其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如,对基本数据类型使 用“a=b”,那么b 的内容就复制给a,若接着又修改了a,那么b 根本不会受这种修改的影响。
为“对象”赋值的时候,情况却不是这样了。对一个对象进行操作时,我们真正操作的是对对象
的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一 个地方。这意味着假若对对象使用“c = d”,那么c和d都指向原本只有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"可能是一个教学项目,旨在帮助学生理解并实践C++中的对象赋值机制。在这个项目中,...
5. **对象赋值**:对象之间赋值使用`=`, 如`Object obj1 = new Object(); Object obj2 = obj1;`,此时obj1和obj2指向同一个对象。 6. **浅拷贝与深拷贝**: - 浅拷贝:仅复制对象引用,不复制对象本身。 - 深拷贝...
反射实现两个类的对象之间相同属性快速赋值,MapperToModel,数据源实体和目标实体将进行转换
在C++编程中,对象的复制与对象之间的相互赋值是至关重要的概念,尤其是在处理大量对象实例时。这里我们将深入探讨这两个主题。 首先,我们来理解对象的复制。当需要创建一个与现有对象具有相同属性的新对象时,就...
- **赋值运算符**:用于已存在的对象之间赋值操作。 #### 八、拷贝构造函数的调用场景 拷贝构造函数主要在以下几种情况下被调用: 1. 使用一个对象初始化另一个对象。 2. 函数参数是类的对象时,在函数调用过程中...
最近有遇到两个类之间的赋值问题,两个类的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个类的属性的值赋值给另一个类。 框架是.net 4.5 public static D Mapper(S s) { D d = Activator...
在类的对象之间,默认的赋值运算符执行浅复制,这意味着对象的数据成员会被逐个复制。但这样可能会导致问题,比如当对象包含指针或动态分配的内存时,浅复制可能导致两个对象共享同一块内存,从而引发意外的结果。 ...
解构赋值的基本形式是通过花括号 `{}` 来指定变量和对象属性之间的对应关系。例如: ```javascript var {name} = { name:'Joh', age:10}; ``` 这行代码会将对象 `{name: 'Joh', age: 10}` 的 `name` 属性值赋给...
C++实现三维动态数组,赋值,加减乘算法,适用于三维空间对象之间的运算实现。 3DArray.zip └── 3DArray ├── 3DArray.dsp ├── 3DArray.dsw ├── 3DArray.ncb ├── 3DArray.opt ├── 3DArray.plg ├─...
在Java开发中,数据对象之间的属性赋值是一个常见的任务,特别是在处理业务逻辑时。Spring框架提供的`BeanUtils.copyProperties`方法极大地简化了这个过程。本文将深入探讨如何使用`BeanUtils.copyProperties`进行...
这里的“java不同对象之间及集合的复制”主要关注如何高效且便捷地完成对象及其集合的复制工作,避免繁琐的手动赋值。描述中提到的“model VO值复制注解”提供了一种自动化的方法,使得复制过程更加简洁和灵活。 1....
基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替。 具体表现在以下几个方面: 派生类对象可以向基类对象赋值...
在Delphi编程中,事件(Events)是一种特殊的函数指针,用于传递方法或者回调机制,使得对象之间可以进行通信。事件赋值操作是Delphi中一个重要的概念,它允许我们动态地将一个方法绑定到特定的事件上。下面将详细...
Java实现不同的类的属性之间相互赋值 在 Java 中,实现不同的类的属性之间相互赋值是一种非常常见的操作,特别是在读写数据库的时候。这篇文章将讲解如何使用 Java 实现不同的类的属性之间相互赋值。 在开发过程中...
最后,如果我们对引用的对象赋值为 `null` 或其他非引用类型,那么原来的引用关系会被切断,相互之间不再有影响。例如: ```javascript var arr = {"a":"1","b":"2"}; var arr1 = arr; arr = {}; // 这里切断了arr...
UML(统一建模语言)类图是软件设计中用于表示类、接口、继承关系以及对象之间关系的图形表示。在类图中,我们可以看到以下元素: - 类名:用矩形表示,包含类的名称。 - 属性:在类名下方列出,表示类的成员变量,...
在编程中,包含动态分配成员的类需要提供拷贝构造函数,并重载“=”赋值操作符,以避免对象之间的不独立和隐患。 一、拷贝构造函数 拷贝构造函数是一种特殊的构造函数,它在对象建立时被调用,以复制指针所指向的...
### Java对象和对象的引用之间的关系 #### 一、Java对象和对象的引用的基本概念 在Java编程语言中,理解对象和对象引用之间的关系是非常重要的基础。对象是类的一个实例,而对象引用则是用于访问该对象的一种手段...