Java攻略学习笔记4(构造方法引用2)
1.复制构造函数
(1)假设我们有一个人员列表,先将其转换为流,再将其转换回列表,那么引用不会发生任何变化。
例:
a.创建一个Person类,它有两个构造方法:
b.在PersonTest.java文件中创建方法addressTest():
c.在PersonTest.java文件中创建方法equalsTest():
(2)通过复制构造函数(传入一个Person参数,并返回一个相同特性的新Person)来切断连接。
a.创建(1)中的Person类
b.在PersonTest.java文件中创建方法addressTest():
c.在PersonTest.java文件中创建方法equalsTest():
#笔记##Java#
(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#
vivo公司福利 730人发布