A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷丹 中级黑马   /  2013-10-24 22:14  /  1331 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的程序怎么重写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 "";
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

5 个回复

倒序浏览
如果要比较两个对象是否指向同一个实例,用==判断就可以了。java中是无法获取一个对象的地址的,在C语言里面是可以实现的。

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

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

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
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. }
复制代码
你会发现他们的值是一样的

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 我能学编程吗 于 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. }
复制代码
可看到输出结果是相同的。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
想看地址值  就调用hashcode。
回复 使用道具 举报
To 金牌黑马 2013-10-27 16:04:06
地板
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马