程序员面试必考题(十二):Java标准类--Object类

来源于微信公众号:开点工作室(ID:kaidiancs)

Java中,有一个很特殊的类,它是所有类的直接或间接父类,也是类库中所有类的父类,处在类层次的最高点,这就是java.lang.Object类。Object类包含了Java中所有类的公共属性,其他的类都是从Object类派生出来的,其构造方法是Object()


Object类定义了几个有用的方法,包括toString()。正因为有这个方法,Java中所有的对象内容都可转换为字符串。不过,对有些对象而言,转换成字符串没有什么意义,因此很少使用toString()方法。


Object中的所有方法都可被任意类继承。Object不是抽象类,所有这些方法都已经实现了。如果这些缺省实现不能满足某个子类的要求,则子类中可以重写这些方法。


Object类中的主要方法列在表1中。


1 Object 类的主要方法

方法

功能

public final Class getClass()

获取当前对象所属的类信息,返回Class对象。

public String toString()

返回描述当前对象有关信息的一个字符串。

public boolean equals(Object obj)

比较两个对象是否是同一对象,是则返回true。

protected Object clone()

生成当前对象的一个拷贝,并返回这个复制对象。

public int hashCode()

返回该对象的哈希代码值。

protected void finalize() throws Throwable

定义回收当前对象时所需完成的资源释放工作。


1.1 toString方法


Object类中的toString方法以字符串形式返回相应的对象。


System.out.println方法输出的内容大多是字符串或字符串再加上变量的值。例如,语句:

System.out.println ("A quote by AbrahamLincoln: ");

输出一行字符。若整型变量 counter 的值是 3 ,则下行语句:

System.out.println ("counter = " +counter);

将输出 counter = 3


System.out.println方法的参数还可以是一个对象,表示要输出对象的信息。当参数为对象时,隐含调用了继承于Object类的toString方法。缺省的功能是输出对象所属类的名字,加上字符@,再加上一个数,这个数表示该对象所在的内存地址。例如,


SavingsAccount s = new SavingsAccount(500);

System.out.println(s);

得到的信息类似于:SavingsAccount@fea485c4。


如果想得到更详细的输出,需要在自己的类中重写toString方法。即使用户程序中不需要输出任何对象,也应该为每个类定义toString方法,这是个好习惯,有助于程序的调试。


例1 重写toString方法。

public class OrderedPair

{

privatedouble x;

privatedouble y;

OrderedPair(doublexx, double yy)

{

this.x=xx;

this.y=yy;

}

OrderedPair()

{

x=0;

y=0;

}

//other methods ...

/*Returns this OrderedPair in String form. */

publicString toString()

{         return "(" + x + " , "+ y + ")";

}

}


则语句

OrderedPair p = new OrderedPair(7, 10);

System.out.println(p);

将调用重写的toString方法,并输出有序对:(7.0 , 10.0)。


例2 重写toString方法

为BankAccount类重写toString方法,如下所示。


/* Returns this BankAccount in String form.*/

public String toString()

{         return"Bank Account: balance = $" + myBalance;

}


语句

BankAccount b = new BankAccount(600);

System.out.println(b);

得到的输出如下:

Bank Account: balance = $600.0


符号+除了可表示加法运算外,还可作为字符串连接运算符,实现的是两个字符串的拼接,后一个字符串拼接在前一个字符串的后面。


数组对象是个例外,它们不能有toString方法。要打印数组元素,必须遍历数组,显式打印每个元素。

【例题】 Refer to these declarations:(来自美国AP考试)

Integer k = new Integer(8);

Integer m = new Integer(4);

Which test will not generate an error?

I.if(k.intValue()== m.intValue())...

II.if((k.intValue()).equals(m.intValue()))...

III.if((k.toString()).equals(m.toString()))...

A.I only        B.IIonly       C.IIIonly        D.Iand III only      E.I,II, and III


解:D。测试I是正确的,因为使用==比较内置类型(本例中是int值)是可行的。测试III也可行,因为k.toString()和m.toString()都是String类型,应当使用equals来比较。测试II是错误的,因为不能在int上调用一个方法(此处是equals)。


1.2 equals方法


Object类中的equals方法对两个对象进行比较。所有的类均从Object类继承该方法。如果调用对象和参数对象obj是同一个对象,equals方法返回真,否则返回假。同一个对象意味着指向相同的内存空间。例如:


Date d1 = new Date("January", 14,2001);

Date d2 = d1;

Date d3 = new Date("January", 14,2001);


测试(d1.equals(d2))返回真,但是测试(d1.equals(d3))返回假。虽然d1和d3指向的内容是一样的,但保存这些内容的地址是不同的,即d1和d3没有指向同一个对象。


如果想让两个内容相同的对象称为相等,必须重写类中的equals方法。本章后面介绍的一些标准类按这种方式重写了equals方法。在AP考试中,考生不需要重写equals方法。


equals的缺省实现等价于对象的==关系。在上面的Date例子中,测试(d1==d2)返回真;测试(d1==d3)返回假。


在Java中不能重载运算符<、>等。要比较对象,必须使用equals方法,如果类实现了Comparable接口,也可用compareTo方法。


其他方法本文不再繁述,读者可以参阅相关Java教材。

全部评论

相关推荐

兄弟们你们进大厂靠的是什么项目啊
DOTPHTP:课设改。其实项目什么的如果不是实习里面的生产项目的话,建议✍️那种自己想要做的。突出个人自驱力,而不是为了找工作不得不随波逐流这种
点赞 评论 收藏
分享
06-19 12:33
安徽大学 Java
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 14:01
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务