黑马程序员技术交流社区
标题:
关于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()
public class Test{
public static void main(String[] args){
String s="abc";
String s1="abc";
System.out.println(s.hashCode());
System.out.println(s1.hashCode());
}
public String toString(){
return "";
}
}
复制代码
你会发现他们的值是一样的
作者:
我能学编程吗
时间:
2013-10-25 00:01
本帖最后由 我能学编程吗 于 2013-10-25 00:03 编辑
支持上楼说法:
如果你想过过重写的隐,可以这样给你实现:
public class Demo {
public static void main(String[] args) throws Exception {
MyString s1 = new MyString("abc");
MyString s2 = new MyString("abc");
System.out.println(s1);
System.out.println(s1);
}
}
class MyString {
private String string;
public MyString(String string) {
this.string = string;
}
@Override
public String toString() {
return string.hashCode() + "";
}
}
复制代码
可看到输出结果是相同的。
作者:
卑微の小幸福
时间:
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