Java攻略学习笔记4(构造方法引用2)

1.复制构造函数
(1)假设我们有一个人员列表,先将其转换为流,再将其转换回列表,那么引用不会发生任何变化。
例:
a.创建一个Person类,它有两个构造方法:
package com.zxq.p4;
public class Person {
    private String name;
    //Person的复制构造函数
    public Person(Person p){
        this.name=p.name;
    }
    
    public Person(String name){
        this.name=name;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
}

b.在PersonTest.java文件中创建方法addressTest():
public static boolean addressTest(){
    Person before=new Person("Grace Hopper");
    //将人员列表转换为流,再转换为类表
    List<Person> people=Stream.of(before).collect(Collectors.toList());
    Person after=people.get(0);
    return before==after;
}
在TestClass.java(用于测试的)中创建方法addressTest():
@Test
public void addressTest(){
        
    if(PersonTest.addressTest()){
        System.out.println("两个对象是相同的");
    }else{
        System.out.println("两个对象是不相同的");
    }
        
}
//以上代码运行出的结果为:两个对象是相同的(说明after和before的对象相同)

c.在PersonTest.java文件中创建方法equalsTest():
public static boolean equalsTest(){
        
    Person before=new Person("Grace Hopper");
    List<Person> people=Stream.of(before).collect(Collectors.toList());
    Person after=people.get(0);
        
    //使用before引用修改人名
    before.setName("Grace Murray Hopper");
        
    return after.getName().equals("Grace Murray Hopper");
        
}
在TestClass.java(用于测试的)中创建方法equalsTest():
@Test
public void equalsTest(){
        
    if(PersonTest.equalsTest()){
        System.out.println("两个对象的值是相同的");
    }else{
        System.out.println("两个对象的值是不相同的");
    }
        
}
//上面代码的运行结果为:两个对象的值是相同的(说明修改before中的人名后,after的人名也已经被修改,引用不会发生变化)
(2)通过复制构造函数(传入一个Person参数,并返回一个相同特性的新Person)来切断连接。
a.创建(1)中的Person类
b.在PersonTest.java文件中创建方法addressTest():
public static boolean addressTest(){
    Person before=new Person("Grace Hopper");
    //将人员列表转换为流,再转换为类表
    List<Person> people=Stream.of(before).map(Person::new).collect(Collectors.toList());
    Person after=people.get(0);
    return before==after;
}
在TestClass.java(用于测试的)中创建方法addressTest():
@Test
public void addressTest(){
        
    if(PersonTest.addressTest()){
        System.out.println("两个对象是相同的");
    }else{
        System.out.println("两个对象是不相同的");
    }
        
}
//以上代码运行出的结果为:两个对象是不相同的(说明after和before的对象不相同,但对象中所存的值是相同的,Person::new调用构造函数,传入一个Person实例并返回一个有效的新实例)

c.在PersonTest.java文件中创建方法equalsTest():
public static boolean equalsTest(){
        
    Person before=new Person("Grace Hopper");
    List<Person> people=Stream.of(before).map(Person::new).collect(Collectors.toList());
    Person after=people.get(0);
        
    //使用before引用修改人名
    before.setName("Grace Murray Hopper");
        
    return after.getName().equals("Grace Murray Hopper");
        
}
在TestClass.java(用于测试的)中创建方法equalsTest():
@Test
public void equalsTest(){
        
    if(PersonTest.equalsTest()){
        System.out.println("两个对象的值是相同的");
    }else{
        System.out.println("两个对象的值是不相同的");
    }
        
}
//上面代码的运行结果为:两个对象的值是不相同的(说明修改before中的人名后,after的人名不会被修改,before和after之间引用的连接已经被切断)

#笔记##Java#
全部评论

相关推荐

最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务