javaSE问题。。你的基础有多好!!简单问题。。

xsc1017 2013-08-14 07:00:03
static String s;
public static void main(String[] args){
System.out.println(s);
}
简单问题 这样会打印出null.很简单
但是不知道我理解的正确不正确,每个打印语句其实调用的是toString()方法.
但是当我把程序改成
static String s;
public static void main(String[] args){
System.out.println(s.toString());
}
就会报异常.
报异常我能理解.但是第一个程序能打印出null,让我想不通.(能打印出null说明,他把null转成了字符串).
请问是怎么回事.内部是怎么把null转成字符串的或者说是用什么方法转的...
...全文
298 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子侠客 2013-08-14
  • 打赏
  • 举报
回复
MARK!!
keepdaydayup 2013-08-14
  • 打赏
  • 举报
回复
引用 4 楼 fudongrifdr 的回复:
看一下源代码不就知道了?
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
这种思路很赞
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
引用 16 楼 fudongrifdr 的回复:
打印语句调用的是toString方法... 你这结论这么难以纠正?。。你没看见println重载了多次?
你说的是对的,我知道哪里错了.是重载了多次.我全看了一边.不过还有write()方法没有看懂.似乎有点难理解
末日哥 2013-08-14
  • 打赏
  • 举报
回复
打印语句调用的是toString方法... 你这结论这么难以纠正?。。你没看见println重载了多次?
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
谢谢大家了.我知道怎么回事了. public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } } public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 这应该是正确的理解.所以说 打印语句调用的是toString方法...
末日哥 2013-08-14
  • 打赏
  • 举报
回复
引用 7 楼 xsc1017 的回复:
[quote=引用 4 楼 fudongrifdr 的回复:] 看一下源代码不就知道了?
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
这个才是我想要的答案(这样打印语句调用的是toString()方法就没错了).请问源代码是怎么查看的.[/quote] 这里没有调用toString方法。。只有当你想打印一个对象的时候,print调用String.valueOf(Object o)才会调用对象的toString方法
末日哥 2013-08-14
  • 打赏
  • 举报
回复
引用 7 楼 xsc1017 的回复:
[quote=引用 4 楼 fudongrifdr 的回复:] 看一下源代码不就知道了?
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
这个才是我想要的答案(这样打印语句调用的是toString()方法就没错了).请问源代码是怎么查看的.[/quote] eclipse里面可以按住CTRL+鼠标左键点你要查看的方法
MiceRice 2013-08-14
  • 打赏
  • 举报
回复
JDK自带,去目录里面找这个文件: src.zip 顺便贴给你吧:
    public void println(String x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
liayin 2013-08-14
  • 打赏
  • 举报
回复
是要懂内存分析,下载SRC 源码
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
引用 9 楼 ldh911 的回复:
去看看 System.out.println() 这个函数的源码就非常清楚了
怎么查看函数的源码?求指导 谢谢
MiceRice 2013-08-14
  • 打赏
  • 举报
回复
去看看 System.out.println() 这个函数的源码就非常清楚了
liayin 2013-08-14
  • 打赏
  • 举报
回复
因为这样写String 是常量,放在常量池的,所以内容是NULL static String str=new String();; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(str.toString()); } 如果你这么写,那就为"" 值. 要理解内存分析。 有问题QQ:25952312: J2EE群号:145992377
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
引用 4 楼 fudongrifdr 的回复:
看一下源代码不就知道了?
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
这个才是我想要的答案(这样打印语句调用的是toString()方法就没错了).请问源代码是怎么查看的.
末日哥 2013-08-14
  • 打赏
  • 举报
回复
对象才有toString()方法
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
引用 3 楼 w215230188 的回复:
第一种会打印出null 是因为引用类型对象的默认值为NULL,但第二个你调用了String的toString 方法 就会抛出空指针异常 因为 对象为空 调用不了它的方法
你没有理解我的意思吗?我当然知道默认值是null,我想问的是,打印语句调用的是toString方法(如果你认为不是调用toString方法,那么请你解释下是怎么打印出字符串来的).那么为什么第一种可以打印出null
末日哥 2013-08-14
  • 打赏
  • 举报
回复
看一下源代码不就知道了?
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }
风程序 2013-08-14
  • 打赏
  • 举报
回复
第一种会打印出null 是因为引用类型对象的默认值为NULL,但第二个你调用了String的toString 方法 就会抛出空指针异常 因为 对象为空 调用不了它的方法
xsc1017 2013-08-14
  • 打赏
  • 举报
回复
引用 1 楼 fudongrifdr 的回复:
每个打印语句其实调用的是toString()方法,这句话严重有问题。。
求解释.不然是怎么打印出来的..
末日哥 2013-08-14
  • 打赏
  • 举报
回复
每个打印语句其实调用的是toString()方法,这句话严重有问题。。

62,620

社区成员

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

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