Object类
在java类继承结构中,java.lang.Object类位于顶端;
如果定义一个java类时没有使用extends关键字声明其父类,则其父类默认为java.lang.Object类
Object类型的引用变量可以指向任何类型对象
重写toString方法
Object类中的重要方法,用于返回对象值的字符串表示;原则上建议重写,格式大多遵循"类的名字[域值]",例如:
public String toString() {
return getClass().getName();
+"[name="+name
+",salary="+salary
+",gender="+gender
+"]";
}
java语言中很多地方会默认调用对象的toString方法:
字符串+对象,自动调用对象的toString方法
-System.out.print(任意对象),直接调用toString方法
如果不重写toString方法,将使用Object的toString方法,其逻辑为:--类名@散列码
toString方法是非常有用的调试工具;
JDK中的标准类库中,许多类都定义了toString方法,方便用户获取有关对象状态的必要信息;
强烈建议为自定义的每一个类增加toString方法
重写Cell的toString()方法
public class Cell{
//重写toString方法,返回对cell信息的描述
@Override
public String to String(){
return getClass().getName()+"["+row+","+col+"]";
}
}
String重写toString方法
String的toString()方法就是将自身返回了
public String toString(){
return this;
}
equals方法
Object中的方法,作用在于检测一个对象是否等于另外一个对象;
在Object类中,这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;
在实际应用中,一般需要重写该方法,通过比较对象的成员属性,使该方法更有意义,例如:对于Cell类,如果不重写equals方法,下面代码在cell1和cell2指向用一个对象才为true,可以将其重写为:当x和y坐标相等时,两个对象即相等,这样更加有意义一些.
如何重写equals方法
public boolean equals(Object obj){
if(obj==null){
return false;
}
if(this==obj){
return true;
}
if(obj instanceof Cell){
Cell cell=(Cell) obj;
return cell.row==row&& cell.col==col;
}else{
return false;
}
}
equals和==的区别
==用于比较变量的值,可以应用于任何类型,如果用于引用类型,比较的是两个引用变量中存储的值(地址信息),判断两个变量是否指向相同的对象;
equlas是Object的方法,重写以后,可以用于比较两个对象的内容是否"相等";
需要注意的是,Object默认的equals方法的比较规则用==
包装类
在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象;
所有的基本类型都有一个与之对应的类,即包装类(wrapper)
包装类概述
包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值
包装类是final的,不能定义他们的子类
int ------------java.lang.Integer
long----------java.lang.Long
double-------java.lang.Double
short--------java.lang.Short
float--------java.lang.Float
byte--------java.lang.Byte
char--------java.lang.Character
boolean---java.lang.Boolean
抽象类Number是Byte、Double、Float、Integer、Long、Short类的父类
--doubleValue() 以double形式返回指定的数值
--intValue() 以int 形式返回指定的数值
--floatValue()以float形式返回指定的数值
static int MAX_VALUE 值为:2^31 -1的常量,表示int类型能表示的最大值
static int MIN_VALUE 值为:-2^31的常量,表示int类型能表示的最小值
Integer的静态方法parseInt用于将字符串转换为int.
String str="123";
int value=Integer.parseInt(str);
System.out.println(value); //123
str="壹佰贰";
//会抛出NumberFormatException
自动装箱和拆箱操作
从java5.0版本以后到了autoboxing功能,自动"拆箱"和"装箱”是依靠JDK5的编译器在编译器的预处理工作.
下列代码写法均为正确形式:
Integer a=100; //装箱
Integer b=200; //装箱
Integer c=a+b //拆箱再装箱
double d=c // 拆箱
装箱和拆箱是"编译器"认可的,而不是虚拟机.编译器在生成类的字节码时插入必要的方法调用
Integer a=100 ==>Integer a=Integer.valueOf(100);
int d=c=======>int d=c.intValue();