关于java String变量和toString(),以及常量池的疑问,有代码,请看一下

代码如下我就是想输出看看s的地址是什么?另外就是System.out.println(a)为何输出的就是a所指向的常量池中的对应的字符串对象的值呢?虽然会默认调用toSt... 代码如下

我就是想输出看看s的地址是什么?
另外就是System.out.println(a)为何输出的就是a所指向的常量池中的对应的字符串对象的值呢?
虽然会默认调用toString方法,但是不应该是将a这字符串引用型变量里面存储对象地址转换成String类型输出吗?
为什么是可以输出a里面存储的地址指向的字符串对象的值呢?

感觉问题出现在了两个方面
1,toString()上面
这是是继承父类的toString(),因此最终只能是找到Object类的toString方法

感觉不是object类的问题,又去看了String方法的toString()
然后下面的是String方法的toString方法
===
String类的toString()方法返回的是是对象本身。说到对象本身,我就有点晕了,什么叫对象本身,
s.toString()----->到底返回的是s的对象地址还是s指向的对象本身?

2,System.out.println(s);上面,下面的是println()的实现代码,那么这里面的Object x 是指的是“aaa”对象的地址s还是aaa对象本身呢?
--我尝试着输出了 System.out.println(String.valueOf(s));结果是 aaa。我现在有点的晕的是String s;中的s到底是啥?是一个String 类型的用来存储一串地址的变量?还是下面说的object参数的。。。。。我表示object参数是什么意思?
还有就是java中所有的变量都是Object 类型的吗???

----------------------------------------------
public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }

我实在是有点晕了,希望各位见谅说一些自己的体会,或者能把我指点一下,绕出这个怪圈最好了
要是您能从内存图,方法区,堆栈的角度给出一定的解读那就更好了
展开
 我来答
zjgzhengxian
推荐于2017-09-28 · TA获得超过1276个赞
知道小有建树答主
回答量:736
采纳率:100%
帮助的人:366万
展开全部

你可以看一下源代码啊

关于toString()方法:

//这个是Object类的toString方法,输出的是类名和对象的hashCode
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//这个是String的toString方法,输出的是这个字符串本省
public String toString() {
    return this;
}

也就是说,如果是个普通的类(比如我们自定义的类)如果没有重写toString方法,则调用父类(如果没有继承其它类的话,这个父类即Object类)的toString方法,输出的就是类名和hashCode。

而String类重写了toString方法,所以调用toString方法时就是返回字符串本身。

如果我们自定义的类也重写了toString方法,我们也可以自定义输出格式。


关于System.out.println(s),还是看源代码:

public void print(Object obj) {
    write(String.valueOf(obj));
}

再看String.valueOf(Object obj)这个方法

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

看得出来,如果obj为null,则String.valueOf(Object obj)返回字符串“null”,而其它类则调用这个类的toString方法。至于其它int、long、char之类的基本类型,不同的类型有不同的定义。

System.out.println(s)就是把得到的字符串返回值输出到控制台中。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式