Object类
* 重写Object中的方法
toString():object类中的toString()返回的字符串getClass().getName() + "@" + Integer.toHexString(hashCode())可以看成是对象的地址,在实际开发中并没有任何意义.Object定义的toString()方法的意图是将该对象以要给字符串的形式返回,但是本身Object提供的这个方法返回的字符串为这个对象的"句柄",即:对象的地址信息,实际开发中意义不大,为此,当我们需要用到一个对象的toString()方法时,就应当重写这个方法.注意,Java提供的类基本上都重写了toString()方法,只有我们自己定义的类才需要额外重写.当我们用到一个类(自己定义的类)的toString()方法时就应当重写这个方法.返回的字符串没有严格要求内容可根据将来实际开发需求而定,但是原则上返回的字符串中应当包含当前对象的属性信息.System.out.println(Object o)该方法可以将给定对象的toString()方法返回的字符串输出到控制台
equals():在Object类中该方法return (this == obj);Object定义的equals方法的意图时比较两个对象的内容是否相同,但是本身提供的equals内部就是用"=="比较的,并无实际意义.所以若希望比较内容就应当重写该方法.Java提供的类基本都已经重写过了.只有我们自定义的类需要单独重写.
public boolean equals(Object obj){
if(obj == null){ // 1: 判断该对象是否为空
return false;
}
if(obj == this){ //2:判断该对象是否就是本身
return true;
}
if(obj instanceof Point){ //3:判断该对象是否是该类的实例
Point point = (Point) obj;
return this.x == point.x && this.y == point.y;
}
return false;
}
基本类型没有面向对象的特性
Number
java有八种基本数据类型(byte,char,short,int,long,float,double,boolean),但是不具备面向对象的特性,所以不能直接参与面向对象的开发,那么在实际使用上会出现很多的不便,为此Java为8种基本类型提供了对应的包装类(Byte,Character,Short,Integer,Long,Float,Double,Boolean),Number是这八种基本类型的父类,以便于让基本类型以对象形式存在并参与面向对象的开发中.
//可以通过实例化将基本类型转换为对应的包装类(不推荐使用new的方法创建,使用valueOf()创建对象)
Integer i1 = new Integer(1);
Double d1 = new Double(1.0);
Integer i2 = Integer.valueOf(1);
数字类型的包装类提供了一组方法:intValue(),doubleValue(),floatValue()...可以将当前包装类表示的数字转换为对应的基本类型.但是在进行转化时,考虑强转溢出问题.
//将包装类转化为基本类型
i1.intValue();
如何获取最大值 MAX_VALUE,MIN_VALUE
//获取最大值,最小值
int iMax = Integer.MAX_VALUE;
int iMin = Integer.MIN_VALUE;
包装类提供了一个静态方法parseXxx(String str),这个方法可以将给定的字符串转换为对应的基本类型,前提时该字符串必须正确的描述了该基本类型可以保存的值.
Integer.parseInt("999999");
Double.parseDouble("99");
自动装箱和拆箱操作
JDK1.5之后出现,编译器认可,会在编译期间自动通过valueOf()将基本类型与相对应的包装类型转换,省去我们转换的麻烦
/*
* 触发自动装箱特性,编译器会将基本类型补全,代码转化为对应的包装类:
* Integer i = Integer.valueOf(1);
*/
Integer i = 1;
/*
* 触发了自动拆箱特性,编译器会将包装类补全代码.转化为对应的基本类型:
* int i1 = i.intValue();
*/
int i1 = i;