下面这个应该算是浅复制吧 为什么第三个输出为false

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改了么 ,怎么能一样呢