java null指针进行"+"运算

天null下 发布于 2015/07/30 15:10
阅读 1K+
收藏 0

突然发现空指针竟然能做加法运算,彻底颠覆了我心中的null。

代码:

public static void main(String[] args) {
		String str1 = null;
		System.out.println(str1+"");
}

运行结果:


这是怎么回事?

个人推断是jvm进行了转换。大家应该知道java的基类是object对象。进行java“+”运算的时候,jvm是自动调用toString()后再进行运算的。不过“文字记载”null类型是java特殊的类型。不继承object,自然也就没有toString()了,所以推测是jvm的关系才转换成字符串“null”后,再和空子串进行的运算。



以下是问题补充:

@天null下:看贴不回,除了不尊重作者,更加不尊重自己,所以,请自重。 (2015/07/30 15:20)
@天null下:小弟的问题已解决,以后的留言可能不会及时回复请大家见谅。 (2015/07/31 11:27)
加载中
1
如比如比
如比如比

叫嚣吧你。好想JVM是你便的是的。在String,PrintStream等很多地方都有这种处理。

String

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


PrintStream

    public void print(String s) {
        if (s == null) {
            s = "null";
        }
        write(s);
    }

天null下
天null下
多谢解惑,小弟不胜感激。
1
纠结名字
真是服了你这种人了,我写了那么多,屁都不放一个,就看到第一句话,然后大放厥词。看帖回不回,跟尊重一个人有什么关系?还请自重!你跟朋友圈里“不转不是中国人”有什么区别?我每天看那么多文章,每个都回,还不累死了?跟你说吧,只有两种文章我会回复,一种是水平高的,一种是比较蠢的,我都忍不住。
0
Erroooooor
Erroooooor
str1+"", 编译器会把它优化成new StringBuilder().append(str1).append(""). 然后你再看看StringBuilder的append是怎么实现的吧
天null下
天null下
多谢,小弟会多看看源代码的。
0
王泽昊
王泽昊
java什么时候有指针了,又什么时候能做指针运算了,2333333
天null下
天null下
谢谢指教,小弟初学乍练请多多包含。
0
首席撸出血
首席撸出血

看贴不回,除了不尊重作者,更加不尊重自己,所以,请自重。



复制一下楼主的话,然后我想说,我看完帖子了,也回复了

天null下
天null下
谢谢留言
0
军师ives
null等同于空字符串。另,一点都没看出来是“指针”
天null下
天null下
谢谢指教,小弟初学乍练请多多包含。
0
您的好友
您的好友
不明白问题补充是想表达什么     
天null下
天null下
谢谢留言
0
alexgaoyh
alexgaoyh
印象中java没有指针的概念····
天null下
天null下
谢谢指教,小弟初学乍练请多多包含。
0
兔龙
兔龙
看帖要回,然并卵
天null下
天null下
谢谢留言
0
大汉刺史
大汉刺史

这不是JVM的作用是Java编译器把这段重构了,反编译一下就看得出是

      new java.lang.StringBuilder [16]
       dup
       aload_1 [str1]
       invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [18]
      invokespecial java.lang.StringBuilder(java.lang.String) [24]

看得出跟下面是一样的

 new StringBuilder(
        String.valueOf(str1)
        );

而你在看String.valueOf方法是这样的

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
。因此Stringbuilder 最终构造的是一个 "null"字符串

天null下
天null下
多谢解惑,有机会会好好看看源代码的。
返回顶部
顶部