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

Java的深拷贝和浅拷贝--等号赋值(一)

    博客分类:
  • JAVA
阅读更多

Java中常用的拷贝操作有三个,operator = 、拷贝构造函数 和 clone()方法。

不同的类型在拷贝过程中的表现:


 (一)预定义非集合类型等号(=)赋值 

	private void testEqualOperator() {
		int x = 1;
		int y = x;
		y = 2;
		if (x != y) {
			System.out.println("deep copy");
		}

		Integer a = 1;
		Integer b = a;
		b = 2;
		if (!a.equals(b)) {
			System.out.println("deep copy");
		}

		String m = "ok";
		String n = m;
		n = "no";
		if (!m.equals(n)) {
			System.out.println("deep copy");
		}
	}

 结果:都是deep copy  

 结论:预定义非集合类型等号(=)赋值 -- 深拷贝

 

2.预定义集合类型等号(=)赋值 

	private void testEqualOperator() {
		List<String> listStringsA = new ArrayList<String>();
		listStringsA.add("a");
		listStringsA.add("b");
		
		List<String> listStringsB = listStringsA;
		listStringsB.add("c");
		
		for (String str : listStringsA) {
			System.out.println(str);
		}
	}

 结果: 

a
b
c

 结论:预定义集合类型等号(=)赋值--“浅拷贝” 

 

3. 自定义类型等号赋值  

class Person {
	private int age;
	private String name;
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

public class AboutCopy {
	
	private void testEqualOperator() {
		Person a = new Person();
		a.setName("NameA");
		a.setAge(10);
		
		Person b = a;
		b.setAge(15);
		
		System.out.println(a.getAge());
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AboutCopy testObj = new AboutCopy();
		testObj.testEqualOperator();

	}

}

 结果:15 

 结论: 自定义类型等号赋值 -- 浅拷贝

  • 大小: 5.8 KB
分享到:
评论

相关推荐

    MyEclipse2017-CI10-取消等号、空格、分号自动补全功能jar

    打开安装好的MyEclipse2017-CI10的\MyEclipse 2017 CI\plugins文件夹,把下载下来的jar进行替换。

    JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解

    在JavaScript中,理解赋值、浅拷贝和深拷贝的概念对于处理复杂的数据结构至关重要,尤其是涉及对象和数组时。这些概念主要与内存管理和数据复制有关。 **赋值**: 在JavaScript中,当我们使用等号(`=`)进行赋值时...

    java 给指定字符赋值

    在Java中,我们可以使用关键字`char`来声明一个字符变量,然后通过等号(=)进行赋值。例如: ```java char letter = 'A'; ``` 上述代码声明了一个名为`letter`的字符变量,并将其赋值为字符'A'。字符值必须用单...

    JavaScript深拷贝和浅拷贝概念与用法实例分析

    在JavaScript编程中,拷贝是一个常见的操作,而区分深拷贝和浅拷贝对于理解程序行为和预测程序结果至关重要。本篇将详细讲解浅拷贝与深拷贝的概念、原理、用法,以及如何在实际编码中利用这些概念。 首先,我们讨论...

    12-阻塞赋值与非阻塞赋值.pptx

    在Verilog语言中,阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-Blocking Assignment)是两种基本的赋值方式,它们在FPGA设计中起着至关重要的作用。理解并熟练掌握这两种赋值方式是进行有效的硬件描述语言...

    拷贝构造函数和赋值操作符号的重载.docx

    对于包含动态分配内存的类,如果不自定义拷贝构造函数,那么默认的浅复制行为可能导致两个对象共享同一块内存资源,这可能导致数据错误和内存泄漏。因此,拷贝构造函数通常用于深复制,确保每个对象都有自己的独立...

    python-赋值表达式.docx

    赋值表达式的关键在于等号(=),它将变量与要赋的值连接起来。例如,`x = 10`就是一个基本的赋值表达式,其中变量`x`被赋予整数值10。 在Python中,赋值表达式不仅可以用于基本的赋值,还可以进行复合运算。这些...

    程序设计-赋值运算.pptx

    赋值运算符通常是一个等号(=),它的基本功能是将右边表达式的计算结果存储到左边的变量中。 例如,`a = 7 + 5` 这个赋值语句会先执行加法运算,得到12,然后将这个结果赋给变量 `a`。这种简单的赋值操作是构建...

    一篇文章读懂Python赋值与拷贝

    变量赋值就是给对象绑定一个名字,赋值并不会拷贝对象。好比我们出生的时候父母就要给我们取一个名字一样,给人取个绰号并不来多出一个人来,只是多一个名字罢了。 两个对象做比较有两种方式,分别是:is 与 == ,is...

    Verilog中阻塞赋值和非阻塞赋值的正确使用

    在遇到非阻塞性赋值时,处理器只是将赋值语句放在一个队列中,评估等号右边的表达式的值,但不会立即更新等号左边的变量的值。它允许处理器继续执行后续的语句,而不需要等待当前赋值的完成。因此,这种赋值方式是...

    赋值语句的编译.rar

    例如,赋值可能会涉及浅拷贝或深拷贝,这在处理复杂数据结构如数组或对象时尤为关键。 9. **并发与赋值**:在多线程环境中,同步和互斥机制可能会影响赋值语句的行为。不正确的赋值可能导致数据竞争和其他并发问题...

    Java软件开发实战 Java基础与案例开发详解 3-4 运算符 共14页.pdf

    赋值运算符用于将一个值赋给一个变量,最常见的是等号 (`=`)。此外,Java还支持复合赋值运算符,如 `+=`(相当于 `a = a + b`)、`-=`(相当于 `a = a - b`)等。 **表格 3.4 赋值运算符** | 运算符 | 描述 | |---...

    java课程设计----简单计算器

    6. **数字和操作按钮**:计算器通常会有一系列数字按钮(0-9)和操作按钮(加、减、乘、除以及等号)。每个按钮上的数字或符号都对应一个特定的值或操作,通过点击按钮触发相应的行为。 7. **运算逻辑**:在Java中...

    VS2005插件,自动对齐赋值等号与注释

    为了代码看起来更整齐,就希望能把赋值等号和单行注释对齐,VS2005好像没有这个功能,干脆自己动手写一个算了。 注意事项: 适用于VS2005中文版,VS2008没有测试。VS2005英文版下貌似不能加载,好像是一个VS2005...

    等号操作符使用陷阱实例

    4. **浅拷贝与深拷贝**:在C++中,当一个对象被赋值给另一个对象(使用`= `操作符),默认情况下是浅拷贝,这意味着只是复制了对象的引用,而非其内部数据的副本。这可能导致意外的副作用,特别是在对象包含指针或...

    python-赋值表达式(1).docx

    在Python中,赋值操作是通过等号(=)来完成的,其基本语法是将变量名放在等号左侧,值放在右侧。例如: ```python x = 10 ``` 在这个简单的例子中,我们创建了一个名为`x`的变量,并赋予它整数值10。之后,我们...

    对齐等号:在变量赋值中自动对齐等号-matlab开发

    此函数允许您在 matlab 编辑器中对齐等号。 从编辑器中选择一些带有变量分配的文本,然后运行该函数。 您可能会发现将此函数添加为 matlab 工具栏的快捷方式更容易。 此函数并不适用于您的整个代码,而仅适用于...

    赋值语句 数据结构 C++/C 面试题

    4. **深拷贝与浅拷贝**:分析何时应使用深拷贝,何时使用浅拷贝,以及它们在多态和容器中的影响。 5. **const修饰的变量赋值**:const变量一旦初始化后就不能再更改,但对const引用或指针的赋值是允许的,不过其含义...

    javabase64-1.3.1

    JavaBase64是Java平台上的一个库,用于处理Base64编码和解码。Base64是一种用于在电子邮件、HTTP头和其他需要传输二进制数据的文本格式中表示二进制数据的编码方法。它将任何可打印的ASCII字符转换为一个64字符的...

    C#源代码-等号和Equals的区别.zip

    在C#编程语言中,等号(`=`)和`Equals`方法是两个常见的用于比较对象的方法,但它们之间存在着显著的区别。理解这些差异对于编写高效、无误的代码至关重要。 1. **等号(`=`):赋值运算符** 等号在C#中主要作为...

Global site tag (gtag.js) - Google Analytics