极速网站
申请会员 文章投稿 ACCP教程网公告:
搜索: 您的位置主页>图文教程>java资源>

6.7 java中的Object类

2008-04-17 16:51:35 来源:互联网 作者: 收藏本页 点击:

 

 

一:"=="与"equals"方法的比较
      equals()是Object类里面的方法.对于字符串变量来说,使用"=="运算符和使用equals()方法来比较字符串时,其比较方式是不同的."=="用来比较两个变量本身的值,即两个对象在内存中的首地址,而equals()方法则是比较两个字符串中所包含的内容是否相同.

      但是,对于非字符串类型的变量来说,"=="和equals()方法都用来比较其所指对象在堆内存中的首地址.换句话说,"=="运算符和equals()方法都是用来比较两个类型的变量是否指向同一个对象;另外,对于s3和s4这两个由字符串常量所生成的变量,其中所存放的内存地址是相同的.看下面的演示程序:

class A
{
int a=1;
}
public class t
{
   public static void main(String[] args)
{
A obj1=new A();
A obj2=new A();

String s1,s2,s3="abc",s4="abc";

s1=new String("abc");
s2=new String("abc");

System.out.println("s1.equals(s2)是"+(s1.equals(s2)));
System.out.println("s1==s3是"+(s1==s3));
System.out.println("s1.equals(s3)是"+s1.equals(s3));
System.out.println("s3==s4是"+(s3==s4));
System.out.println("s2.equals(s3)是"+s2.equals(s3));
System.out.println("s1==s2是"+(s1==s2));
System.out.println("obj1==obj2是"+(obj1==obj2));
System.out.println("obj1.equals(obj2)是"+obj1.equals(obj2));

obj1=obj2;
System.out.println("obj1=obj2后obj1==obj2是"+(obj1==obj2));
System.out.println("obj1=obj2后obj1.equals(obj2)"+obj1.equals(obj2));
}
}
运行结果:

s1.equals(s2)是true
s1==s3是false
s1.equals(s3)是true
s3==s4是true
s2.equals(s3)是true
s1==s2是false
obj1==obj2是false
obj1.equals(obj2)是false
obj1=obj2后obj1==obj2是true
obj1=obj2后obj1.equals(obj2)true


二:toString()方法
    toString()方法的功能是将调用该方法的对象的内容转换成字符串,并返回其内容,但返回的是一些意义不大的字符串.因此如果要用toString()方法返回对象的内容,可以重新定义该方法以覆盖父类中的此方法以满足需要.

     API上的说明: Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
        getClass().getName() + '@' + Integer.toHexString(hashCode()));

演示程序如下:
覆写toString()方法

public class B
{
    public String toString() {
     return "This is a ";
   }
}

public class A {
    public static void main(String[] args) {
      System.out.println(new B());
    }
}

输出结果:This is a

     理解:因为在B中已经声明了toString方法,实际是对toString方法进行了重载了,此时System.out.println(object)会自动调用该object的toString方法输出。

      java中任何class都是默认从Object扩展而来,都有一个toString()方法,System.out.println(object)会默认调用这个object的toString方法,如果在class里面,重写了这个toString()方法,也就是说那么输出的时候,调用的toString方法就是class中所定义的了。

      其实,System.out.println()的参数就是string ,他会把其中的参数转换为string类型,给你重写tostring方法,所以当把new b()转化成string时,将调用tostring 函数,而此时调用的就是你定义的函数。

但是要注意的是:
打印出来的"A@13f5d07"并非他的"地址",而是对象的所属类以及该对象的哈希值

以下是Object类的toString()方法的代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

其中:
getClass().getName()返回对象所属类的类名
hashCode()返回该对象的哈希值
Integer.toHexString(hashCode())将对象的哈希值用16进制表示
因此最后得到了这样的结果:A@13f5d07

三.getClass()方法的使用
API的解释:返回一个对象的运行时类.
因为getClass()方法是Object类中的方法,而所有类均是Object类的子类,所以在任何类里均可调用这个继承而来的方法.

以下是getClass()方法的演示程序:
class person {
  protected String name;
  public person(String xm) {
    name=xm;
   }
}
public class app {
public static void main(String[] args) {
   person per =new person("张三");
   Class obj=per.getClass();
   System.out.println("对象per 所属的类为:"+obj);
}
}



标签:
评论总数:0 [ 发布评论 ] 网友评论
关于我们 - 版权声明 - RSS订阅 - 网站地图 - 网站帮助 成都水货手机网