java中String的一个小陷阱

首先大家看一段代码

public class HelloWorld {  
    public static void main(String args[]) {  
        String s = null;  
        s = s+"word";  
        System.out.println("hello " +s);  
    }  
}  

大家猜猜输出结果是什么?hello word吗? 错了,答案是:hello nullword 为什么会是这样的结果呢? 这是因为:s = s+"word"; 等价于 s = String.valueOf(s)+"word"; Integer,Double都一样。 分析一下String的源码可以得出答案:

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

String的valueof方法参数为obj的时候,如果obj为Null,会把null转为"null",所以会出这样的结果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

Java中对于unsigned byte类型的转换处理问题由来Java中unsigned byte 的转换测试程序小结

阅读到上述源代码时,对于int luminance = row[x] & 0xFF;最初不是很理解。查询之后,发现原来Java中是没有unsigned byte...

12320
来自专栏python3

python异常处理--try...except

在python中,用try来测试可能出现异常的语句,然后用except来处理可能出现的异常,try except的表达形式如下:

14920
来自专栏Java编程

Java动态代理机制详解

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来...

48910
来自专栏全沾开发(huā)

co源码解读

co源码解读 背景: 闲来无事,翻了下co的源码来看,源码短小精悍,算上注释,一共240行左右; 决定写一篇博客来记录下学习的心得。 ...

36560
来自专栏用户2442861的专栏

剑指offer 36 数组中的逆序对

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27520535

16310
来自专栏緣來來來

Python中lambda的学习

这个函数引用时需要传入一个参数,并且有一个返回值。这个参数一般是for x in L之类的传进来,或者直接调用f(3)。

51620
来自专栏IT可乐

浅谈 Integer 类

  突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: public s...

21690
来自专栏Java技术栈

Java趣味分享:try/finally

考虑以下四个测试方法,它们会输出什么? public class Test { public static void main(String[] arg...

35440
来自专栏软件开发 -- 分享 互助 成长

C++ 字符串分割

    java和C#中字符串都可以使用split进行分割,但是C++中却没有这个方法,之前总是自己写一个函数自己进行分割,倒也不麻烦,今天在网上找了类似的函数...

28660
来自专栏算法修养

pta 习题集 5-15 数组循环左移

本题要求实现一个对数组进行循环左移的简单函数:一个数组aa中存有nn(>0>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移mm(≥0≥0)个位...

37660

扫码关注云+社区

领取腾讯云代金券