首页 > 编程语言 >java中的clone()方法的研究---(3)如何编写正确的clone()方法:基本数据类型

java中的clone()方法的研究---(3)如何编写正确的clone()方法:基本数据类型

时间:2022-12-06 11:03:24浏览次数:42  
标签:java clone 数据类型 public Person pclone age


先来看看一个自定义Object,它里面的属性都有啥:

  1. 基本数据类型
  2. Wrapper Class(基本数据类型的包装类型)
  3. String
  4. StringBuffer, StringBuilder
  5. Java提供的其他类型
  1. Date
  2. Timestamp
  1. Array
  2. Collection
  3. 子自定义Object类型


一:基本数据类型:不是对象的类型,所以基本数据类型永远都是深克隆。


基本数据类型在赋值的时候,永远都是传值,而不是传引用。

double m = 4; // 此时, 给变量m,开辟了8bytes的内存空间存储
double n = m; // 此时也会,给变量n,开辟新的8bytes内存空间



那么哪些是基本数据类型,这些基本数据类型又占用多少内存空间呢:

基本数据类型

占用内存大小

包装类(Wrapper Class)

byte

1byte

Byte

short

2bytes

Short

int

4bytes

Integer

long

8bytes

Long

float

4bytes

Float

double

8bytes

Double

boolean

1bit

Boolean

char

2bytes

Character


什么是默认的clone()方法:见Person类里面的clone()方法

自定义类Person(之后我会不断地,往里面添加各种类型的属性



package tt.vo;

public class Person implements Cloneable {

// 基本数据类型
private int age;

@Override
public Person clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
return p;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Person [age=" + age + "]";
}
}






---------------------------------------------------------------下面开始测试了-----------------------------------------------------------------------------

测试类TestMain:


package tt;

import tt.vo.Person;

public class TestMain {

public static void main(String[] args) throws CloneNotSupportedException {
// initialize Person p
Person p = new Person();
p.setAge(18);
System.out.println("p:" + p);

Person pclone = p.clone();
System.out.println("pclone:" + pclone);
}

}


debug截图:


java中的clone()方法的研究---(3)如何编写正确的clone()方法:基本数据类型_System

通过debug可以发现:

  • p和pclone的id不一样,说明p和pclone分别指向了两个不同的Person对象
  • Person对象只有一个属性(int age)
  • 基本数据类型在debug时候是没有id的(在这里,可见基本数据类型和对象类型的区别哦)


下面修改一下测试类TestMain:




package tt;

import tt.vo.Person;

public class TestMain {

public static void main(String[] args) throws CloneNotSupportedException {
// initialize Person p
Person p = new Person();
p.setAge(18);
System.out.println("p:" + p);

Person pclone = p.clone();
System.out.println("pclone:" + pclone);

System.out.println("-------------after set-------------------");
p.setAge(180);

System.out.println("p:" + p);
System.out.println("pclone:" + pclone);
}

}





debug截图:




java中的clone()方法的研究---(3)如何编写正确的clone()方法:基本数据类型_System_02





通过debug可以发现:



  • p.setAge(180); 之后,仅仅是p.age的value更改了,
  • pclone.age的value保持不变





--------------------------------------------总结------------------------------------------------------------------



总结,一个自定义的Object:


  • 在编写clone()方法的时候,针对基本数据类型属性,不用特殊处理。
  • 使用默认的clone()方法即可。
  • 在调用默认的clone()方法时候,这些基本数据类型属性都会成功的深克隆。
  • 所以:一个自定义的Object,针对基本数据类型属性,使用默认的clone()方法即可。










标签:java,clone,数据类型,public,Person,pclone,age
From: https://blog.51cto.com/u_15903664/5915167

相关文章