public class Student implements Cloneable
{
private String name;
private int age;
Student(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException
{
Student s1 = new Student("zhangsan", 18);
Student s2 = (Student) s1.clone();
s2.name = "lisi";
s2.age = 14;
System.out.println(s1.name + " " + s1.age);
System.out.println(s2.name + " " + s2.age);
System.out.println(s1.name == s2.name);
}
}
s1.name == s2.name,因为这里比较的是String类型的,会在常量池里面产生两个String类型的对象,肯定会不相等。
s1.name == s2.name
在java中,String比较的是引用,而不是字面值。字符串复制是创建了一个新的字符串对象,显然不等。如果要比较字面值,需要用 equals
C#中,string比较的是字面值,所以可以直接比较。
s2.name = "lisi"; 你不是已经把s2的name改了么 ,怎么能一样呢