📄 name.java
字号:
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.lang.ref.*;
public class Name {
private final String firstname;
private final String lastname;
public Name(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
public String getFirstname(){
return firstname;
}
public String getLastname(){
return lastname;
}
public boolean equals(Object o){
if (this == o) return true;
if (!(o instanceof Name)) return false;
final Name name = (Name) o;
if(!firstname.equals(name.firstname)) return false;
if(!lastname.equals(name.lastname)) return false;
return true;
}
public int hashCode(){
int result;
result= (firstname==null?0:firstname.hashCode());
result = 29 * result + (lastname==null?0:lastname.hashCode());
return result;
}
public String toString(){
return lastname+" "+firstname;
}
//实例缓存,存放Name对象的软引用
private static final Set<SoftReference<Name>> names=
new HashSet<SoftReference<Name>>();
public static Name valueOf(String firstname, String lastname){ //静态工厂方法
Iterator<SoftReference<Name>> it=names.iterator();
while(it.hasNext()){
SoftReference<Name> ref=it.next();
Name name=ref.get();
if(name!=null
&& name.firstname.equals(firstname)
&& name.lastname.equals(lastname))
return name;
}
Name name=new Name(firstname,lastname);
names.add(new SoftReference<Name>(name));
return name;
}
public static void main(String args[]){
Name n1=Name.valueOf("小红","王");
Name n2=Name.valueOf("小红","王");
Name n3=Name.valueOf("小东","张");
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println(n1==n2);
}
}
/****************************************************
* 作者:孙卫琴 *
* 来源:<<Java面向对象编程>> *
* 技术支持网址:www.javathinker.org *
***************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -