如果没有确的指出指出超类,Object就被认为是这个类的超类,在java中,每个类都属于Object的类扩展出来的,可以使用Object类型的变量引用任何类型的对象
Object obj=new Employee("Harry Hacker",35000);
Object类型的变量变量只能作用于各种值的通用持有者,要想对其中的内容进行具体的操作,还需要清楚对象的原始类型,并进行相应的类型转换
Employee e = (Employee) obj;
在java中,只有基本类型不是对象,所有的数组类型,不管是对象数组还是进本类型的数组都扩展了Object类
equals方法
equals方法用于检测一个对象是否等于另一个对象,如果两个对象具有相同的引用,他们就一定是相等的
- getClass方法返回一个对象所属的类,在检测中,只有在两个对象属于同一个类时,才有可能相等
自反性(reflexive)
对于任何非null的引用值x, x.equals(x)必须返回true对称性(symmetric)
对于任何非null的引用值x和y, 当且仅当y.equals(x)返回true时,x.equals(y)返回true传递性(transitive)
对于任何非null的引用值x,y,z ,如果x.equals(y)返回true, y.equals(z)返回true, 则x.equals(z)返回true一致性(Consistent)
对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者一致地返回false
在子类中重新定义equals,就要在其中包含super.equals(other)。对于任意非空引用x,x.equals(null)应该返回false
java.util.Arrays;
static Boolean equals(type[] a, type[] b)
如果两个数组长度相同,并且在对应位置上的数据元素也相同,将返回true。
java.util.Objects
static boolean equals(Object a, Object b)
如果a和b都为null,返回true;如果只有其中之一为null,返回false;否则返回a.equals(b)。
hashCode方法
散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的。如果x和y是两个不同的对象,x.hashCode()与y.hashCode()基本不会相同。hashCode()
方法应该返回一个整形数值(也可以是负数),并合理地组合实例域的散列码,以便能够让各个不同的对象产生的散列码更加均匀。
java.lang.Object
int hashCode()
返回对象的散列码(其值为对象的存储地址)。
java.util.Objects
static int hash(Object… objects)
对各个参数调用Objects.hashCode,并组合这些散列值。
static int hashCode(Object a)
如果a为null,返回0;否则,返回a.hashCode()。
java.lang.(Integer|Long|Short|Byte|Double|Float|Character|Boolean)
static int hashCode((int|long|short|byte|double|float|char|boolean) value)
返回给定值的散列码。
java.util.Arrays
static int hashCode(type[] a)
计算数组a的散列码。
toString方法
toString()方法返回反映这个对象的字符串, 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
- 布尔型数据true和false返回对应的'true'和'false'
true.toString();//'true'
false.toString();//'false'
- 字符串类型原值返回
'1'.toString();//'1'
''.toString();//''
'abc'.toString();//'abc'
- 数字在使用toString()方法时,加括号可解决
(0).toString();//'0'
(-0).toString();//'0'
(+1.2).toString();//'1.2'
(-1.2).toString();//'-1.2'
- 数字类型的toString()方法可以接收表示转换基数(radix)的可选参数
var n = 17;
n.toString();//'17'
n.toString(2);//'10001'
n.toString(8);//'21'
n.toString(10);//'17'
n.toString(12);//'15'
n.toString(16);//'11'
eg:
public class Orc
{
public static class A
{
public String toString()
{
return "this is A";
}
}
public static void main(String[] args)
{
A obj = new A();
System.out.println(obj);
}
}
this is A
- PrintStream的方法println()不接受StringBuffer类型的参数.
- 在调用x.toString()的地方可以用“”+x代替,这条语句将一个空串与x的字符串表示相连接,这里的x就是x.toString().
- Object类定义了toString方法,用来打印输出对象所属类的类名和散列码
System.out.println(System.out)
java.io.PrintStream@2f6684