求指点关于tostring()问题

liangs0620 2013-01-25 12:01:27
下面的程序怎么重写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 "";
}
}
...全文
209 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtfgy2012 2013-01-25
  • 打赏
  • 举报
回复
应该不能,因为没多大意义 而且也是java不允许的,java是一种安全的语言,我记得初学 java的书里基本都会提到这么一句,但是没和大家说为什么它是安全的
苦海离乱卐 2013-01-25
  • 打赏
  • 举报
回复
首先弄清楚toString方法是干什么的, As much as is reasonably practical, the hashCode method defined by * class <tt>Object</tt> does return distinct integers for distinct * objects. (This is typically implemented by converting the internal * address of the object into an integer, but this implementation * technique is not required by the 也就是说hashCode其实反映的是Object的内存地址,是用C是实现的
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
引用 5 楼 xtfgy2012 的回复:
我觉得你还不如说说你真实的目的想干嘛 说不定你自己的设计上就存在问题
就是想知道能不能得到引用s和s1的值,不是对象的值
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
引用 7 楼 AA5279AA 的回复:
引用 楼主 liangs0620 的回复:下面的程序怎么重写tostring方法使输出结果为这两个引用的地址值,而不是真实值? Java code?123456789101112131415package fortest; public class Test{ public static void main(String[] args){ S……
好吧,那我想知道怎么输出s和s1的值(引用的值而不是对象的值)
失落夏天 2013-01-25
  • 打赏
  • 举报
回复
引用 楼主 liangs0620 的回复:
下面的程序怎么重写tostring方法使输出结果为这两个引用的地址值,而不是真实值? Java code?123456789101112131415package fortest; public class Test{ public static void main(String[] args){ String s="abc"; ……
有点绕口 这样吧,你告诉你想获得的结果是什么样的? 是s的地址? s1的地址? s的值? s1的值? 谁调用toString方法。。 这样会理解的更明白一些。
HarmonyChang 2013-01-25
  • 打赏
  • 举报
回复
。。。介个为什么要这么做?
xtfgy2012 2013-01-25
  • 打赏
  • 举报
回复
我觉得你还不如说说你真实的目的想干嘛 说不定你自己的设计上就存在问题
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
引用 1 楼 xiesisi3 的回复:
JAVA绝对无法获取对象引用的地址!
我错了···是要获取对象的引用而不是对象引用的地址···那又该怎么重写tostring呢?
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
我错了···是要获取对象的引用而不是对象引用的地址····
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
引用 1 楼 xiesisi3 的回复:
JAVA绝对无法获取对象引用的地址!
那这个你怎么说?
package fortest;



public class Test{
	public static void main(String[] args){
		Test t=new Test();
		System.out.println(t);
	}
}
输出结果为fortest.Test@18a992f
xiesisi3 2013-01-25
  • 打赏
  • 举报
回复
JAVA绝对无法获取对象引用的地址!
fortitan 2013-01-25
  • 打赏
  • 举报
回复
LZ的意思大概是想比较这两个字符串到底是不是指向同一个对象吧,要是这们的话可以直接用“==”操作来比较了。 String类已经重写了Object的toString方法和hashCode方法,想找到在地址值的线索已经让屏蔽掉了。你这个请求是没办法完了。 String这个类可以简单的去理解,第一个String对象有字符串信息,以后有新String类对象,只要和第一个String对象有相同的字符序列,就直接去引用第一个String的字符串,自己不会保存字符串信息了。可以用String类的intern()方法去获得第一个String对象的引用。
  • 打赏
  • 举报
回复
String在继承了Object时,可能作了一定的特殊处理,这是我们查看源码也看不到的,所以我们虽然能得到我们自定义类的对象引用的地址,但是String的对象引用地址却无法得到。。。没有为什么。。。我查看了Object和String的toString()的源代码更不理解了,只能作出了以上猜测。。。
liangs0620 2013-01-25
  • 打赏
  • 举报
回复
引用 12 楼 lukangle2008 的回复:
Sring s = "123",只会在栈中创建一个对象。 String s = new String("344");则会创建2个对象,一个是栈中,一个是堆中,堆中对象是对栈中的引用。 String s = "ree"; String s2 = "ree"; 其实用的是一个栈中的对象,不会创建2个,和普通的Object对象不同,JVM对String对象做了优化 ……
引用 12 楼 lukangle2008 的回复:
Sring s = "123",只会在栈中创建一个对象。 String s = new String("344");则会创建2个对象,一个是栈中,一个是堆中,堆中对象是对栈中的引用。 String s = "ree"; String s2 = "ree"; 其实用的是一个栈中的对象,不会创建2个,和普通的Object对象不同,JVM对String对象做了优化 ……
Sring s = "123"不是在String池中创建么?怎么到栈中创建了
苦海离乱卐 2013-01-25
  • 打赏
  • 举报
回复
可以看看 堆栈 然后基本数据类型 引用数据类型
苦海离乱卐 2013-01-25
  • 打赏
  • 举报
回复
Sring s = "123",只会在栈中创建一个对象。 String s = new String("344");则会创建2个对象,一个是栈中,一个是堆中,堆中对象是对栈中的引用。 String s = "ree"; String s2 = "ree"; 其实用的是一个栈中的对象,不会创建2个,和普通的Object对象不同,JVM对String对象做了优化

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧