论坛首页 招聘求职论坛

一眼能说出它的结果

浏览 13966 次
精华帖 (1) :: 良好帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2012-03-31  
我也看出这个结果的,因为我以前这么写过,打出的log我傻了。
0 请登录后投票
   发表时间:2012-03-31  
hoarhoar 写道
我一眼就料到了结果,我给大家分析一下:
String s = null; 
s = s+"word";  //在这一步先对s转字符串,如果s是对象,调用toString(),如果是null,转字符串就是"null",与"word"相加就是nullword
嘱咐一点,在java中运算顺序:从左向右。

精辟
0 请登录后投票
   发表时间:2012-03-31  
在世界的中心呼喚愛 写道
s=null 是一个地址。
s=null+"world" 又是一个地址

所以 是 hello null world



s = null  是一个地址  s.hashCode();可以运行 有值
0 请登录后投票
   发表时间:2012-03-31  
kinglun 写道
在世界的中心呼喚愛 写道
s=null 是一个地址。
s=null+"world" 又是一个地址

所以 是 hello null world



s = null  是一个地址  s.hashCode();可以运行 有值

不行诶,我运行出来是空指针异常
0 请登录后投票
   发表时间:2012-03-31  
kinglun 写道
在世界的中心呼喚愛 写道
s=null 是一个地址。
s=null+"world" 又是一个地址

所以 是 hello null world



s = null  是一个地址  s.hashCode();可以运行 有值

我没说清楚,是“占一个地址”
0 请登录后投票
   发表时间:2012-03-31  
答案是----> hello nullword
编译运行了一边,确定是在这个答案
是word 不是 world
0 请登录后投票
   发表时间:2012-03-31   最后修改:2012-03-31
sinly 写道
public class HelloWorld {
	public static void main(String args[]) {
		String s = null;
		s = s+"word";
		System.out.println("hello " +s);
	}
}

。。。我是给悲剧了一下,看来底子不行



public static void main(java.lang.String[] args);
     0  aconst_null
     1  astore_1 [s]
     2  new java.lang.StringBuilder [16]
     5  dup
     6  aload_1 [s]
     7  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [18]
    10  invokespecial java.lang.StringBuilder(java.lang.String) [24]
    13  ldc <String "word"> [27]
    15  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [29]   
    18  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
    21  astore_1 [s]
    22  getstatic java.lang.System.out : java.io.PrintStream [37]
    25  new java.lang.StringBuilder [16]
    28  dup
    29  ldc <String "hello "> [43]
    31  invokespecial java.lang.StringBuilder(java.lang.String) [24]
    34  aload_1 [s]
    35  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [29]
    38  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
    41  invokevirtual java.io.PrintStream.println(java.lang.String) : void [45]
    44  return

关键是在于java.lang.String.valueOf方法:
    public static String valueOf(Object obj) {
         return (obj == null) ? "null" : obj.toString();
    }


环境:
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)
0 请登录后投票
   发表时间:2012-03-31   最后修改:2012-03-31
PrintStream.java   
/**
     * Prints a string.  If the argument is <code>null</code> then the string
     * <code>"null"</code> is printed.  Otherwise, the string's characters are
     * converted into bytes according to the platform's default character
     * encoding, and these bytes are written in exactly the manner of the
     * <code>{@link #write(int)}</code> method.
     *
     * @param      s   The <code>String</code> to be printed
     */
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }


Sysyem.out is PrintStream
0 请登录后投票
   发表时间:2012-03-31  
大家怎么还讨论这么简单地问题,难道这个网站里不都是高手吗
0 请登录后投票
   发表时间:2012-03-31  
哈哈。。。我前几天刚刚测试过!那天做项目时我也悲剧了,死活通不过,已跟踪发现滴问题!然后单独写了这么个程序,hello nullworld!
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics