| 一:"=="与"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); } } |
|




