JAVA 复制对象需要注意
2021-06-18 23:03
标签:bsp png stringbu soscw ber 变量 pre override void
一.变量间的简单复制
Java 数据结构图
Boolean bln1 = true;
Boolean bln2 = bln1 ;
System.out.println(bln1 +‘---‘+ bln2 )
打印结果: true ---- true
基本数据类型包括byte、int、char、long、float、double、boolean和short。
注意:
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
Java中的字符串String属于引用数据类型。因为String是一个类
二. Java对象间的复制
class Student { private int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } } public class Test { public static void main(String args[]) { Student stu1 = new Student(); stu1.setNumber(12345); Student stu2 = stu1; System.out.println("学生1:" + stu1.getNumber()); System.out.println("学生2:" + stu2.getNumber()); } }
打印结果:
学生1:12345 学生2:12345
如果将Test类变成
public class Test { public static void main(String args[]) { Student stu1 = new Student(); stu1.setNumber(12345); Student stu2 = stu1; stu2.setNumber(54321);
System.out.println("学生1:" + stu1.getNumber());
System.out.println("学生2:" + stu2.getNumber());
}
}打印结果:
学生1:54321 学生2:54321class Student implements Cloneable{原因: 原因出在(stu2 = stu1) 这一句。该语句的作用是将stu1的引用赋值给stu2, 因为Strudent 是同属一个对象,不是重新new
解决方法:
private int number;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public Object clone() {
Student stu = null;
try{
stu = (Student)super.clone(); // 浅复制
}catch(CloneNotSupportedException e) {
e.printStackTrace();
}
return stu;
}
}
public class Test {
public static void main(String args[]) {
Student stu1 = new Student();
stu1.setNumber(12345);
Student stu2 = (Student)stu1.clone();
System.out.println("学生1:" + stu1.getNumber());
System.out.println("学生2:" + stu2.getNumber());
stu2.setNumber(54321);
System.out.println("学生1:" + stu1.getNumber());
System.out.println("学生2:" + stu2.getNumber());
}
}
用java提供的protected native Object clone() throws CloneNotSupportedException; 方法
更多: http://blog.csdn.net/tounaobun/article/details/8491392
JAVA 复制对象需要注意
标签:bsp png stringbu soscw ber 变量 pre override void
原文地址:https://www.cnblogs.com/LinLuMing/p/9706113.html