黑马程序员技术交流社区

标题: 关于tostring()问题 [打印本页]

作者: 雷丹    时间: 2013-10-24 22:14
标题: 关于tostring()问题
下面的程序怎么重写tostring方法使输出结果为这两个引用的地址值,而不是真实值?
package fortest;



public class Test{
        public static void main(String[] args){
                String s="abc";
                String s1="abc";
                System.out.println(s);
                System.out.println(s1);
        }
        public String toString(){
                return "";
        }
}
作者: 周学彬    时间: 2013-10-24 22:29
如果要比较两个对象是否指向同一个实例,用==判断就可以了。java中是无法获取一个对象的地址的,在C语言里面是可以实现的。

String类已经重写了Object类的toString()方法和hashCode()方法,比较两个新创建的对象是否相同依据的是复写的hashCode()方法的返回值。

楼主的第一个字符串s创建在栈内存中,创建第二个字符串s1时,因为是同一个字符串”abc“,所以第二个对象不会被创建,而只是返回s的一个引用。

作者: 黄小贝    时间: 2013-10-24 22:50
String 是 final 类,不能被继承也就没有办法重写,想看是否是同一对象,hashCode()
  1. public class Test{
  2.        
  3.         public static void main(String[] args){
  4.                 String s="abc";
  5.                 String s1="abc";
  6.                 System.out.println(s.hashCode());
  7.                 System.out.println(s1.hashCode());
  8.         }
  9.         public String toString(){
  10.                 return "";
  11.         }
  12. }
复制代码
你会发现他们的值是一样的

作者: 我能学编程吗    时间: 2013-10-25 00:01
本帖最后由 我能学编程吗 于 2013-10-25 00:03 编辑

支持上楼说法:
如果你想过过重写的隐,可以这样给你实现:
  1. public class Demo {

  2.         public static void main(String[] args) throws Exception {
  3.                 MyString s1 = new MyString("abc");
  4.                 MyString s2 = new MyString("abc");
  5.                 System.out.println(s1);
  6.                 System.out.println(s1);
  7.         }
  8. }

  9. class MyString {
  10.         private String string;
  11.         
  12.         public MyString(String string) {
  13.                 this.string = string;
  14.         }
  15.         
  16.         @Override
  17.         public String toString() {
  18.                 return string.hashCode() + "";
  19.         }
  20. }
复制代码
可看到输出结果是相同的。

作者: 卑微の小幸福    时间: 2013-10-25 00:45
想看地址值  就调用hashcode。
作者: To    时间: 2013-10-27 16:04
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2