Java SE复习04
- 关于对象之间的比较(equals和= =)
除了特殊的类,其他普通的类,两种比较方法都是看指向的是否是同一个对象,是同一个对象时才会返回true。
特殊的类:String,Date,File。这些类比较时= =是比较是否指向同一个对象,而equals比较的是对象的内容。
//普通类的对象的比较
public static void main(String args[]){
Person p1=new Person();
Person p2=new Person();
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
p1=p2;
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
}
输出结果:
//特殊类的对象的比较
public static void main(String args[]){
String p1=new String();
String p2=new String();
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
}
输出结果:
-
String创建的对象。
①字面量创建对象:String s="abc;
②new创建对象:String s=new String(“abc”);
字面量创建对象时,只在常量池中创建对象,而new创建对象时,不仅要在常量池中创建,还要在堆中创建。从这个角度看,字面量创建字符串时要省内存一些。 -
包装类(wapper)
①基本数据包装成包装类的实例:装箱;
Integer i=new Integer()110;
②获取包装类实例中的值:拆箱;
int ia=i.IntegerValue();
JDK1.5之后支持自动装箱拆箱,例:Integer i=111;
可以使用包装类中的静态方法实现字符串之间的转换。
int i=Integer.parseInt("123");//字符串转化为整形数据
String s=String.valueOf(123);//整形数据转化为字符串
- 关于toString方法
在没有被重写时,toString是object类中的一个方法,输出对象的地址,效果和直接输出对象引用差不多,可以重写使其可以打印数据。
//没有被重写前
public static void main(String args[]){
Person person=new Person();
System.out.println(person.toString());
System.out.println(person);
}
输出结果:
//Person.java重写toString
public class Person {
public int sex;
public String name;
public int age;
public Person(String name,int age,int sex) {
this.age=age;
this.name=name;
this.sex=sex;
}
public void showInfo(){
System.out.println(this.name);
System.out.println(this.age);
System.out.println(this.sex);
}
@Override
public String toString() {
String string=name+sex+age;
return string;
}
}
//重写后
public static void main(String args[]){
Person person=new Person("Mike",18,0);
System.out.println(person.toString());
System.out.println(person);
}
输出结果:
- 单例设计模式:采取某种方法使某个类只有一个实例对象,当实例对象需要消耗大量时间和资源时适合使用这种设计模式。
实现单例设计方法:将类的构造函数权限设置为private,设置private静态对象,此时类已经实例化了一次,添加getInstance()方法,通过此方法获取已经实例化的静态对象,有两种方式(饿汉和懒汉)。
public class Singleton {
private Singleton(){
}
//饿汉模式
private static Singleton singleton=new Singleton();
//只能通过getInstance()方法获取对象,但由于static变量属性,所有对象指向同一个对象地址。
public static Singleton getInstance(){
return singleton;
}
//Test.java
public class Test {
public static void main(String args[]){
//这时的singleton1,singleton2,类变量singleton都指向同一个地址,实际上类只实例化了一次
Singleton singleton1=Singleton.getInstance();
Singleton singleton2=Singleton.getInstance();
System.out.println(singleton1);
System.out.println(singleton2);
}
}
输出结果:
从输出结果可以看出,无论通过getInstance()方法添加多少个singleton对象都指向的同一个地址,即实际上此类只有一个实例化对象。此外,除了饿汉模式,还有一种懒汉模式。
public class Singleton {
private Singleton(){
}
//懒汉模式
private static Singleton singleton=null;
//只能通过getInstance()方法获取对象,但由于static变量属性,所有对象指向同一个对象地址。
public static Singleton getInstance(){
singleton=new Singleton();
return singleton;
}
}
}
两者区别在于,如果不使用此类的实例化对象,懒汉模式就不会实例化,直到需要使用才会通过getInstance()方法实例化,而饿汉模式则无论是否使用,先将静态对象实例化出来。