美文网首页互联网科技
JJava程序员的一段基础逻辑代码!却有很多人的结果是错的

JJava程序员的一段基础逻辑代码!却有很多人的结果是错的

作者: Web前端学习营 | 来源:发表于2018-10-30 18:38 被阅读3次

    首先,让我们来看看这行代码是什么!

    可能有很多人会认为,输出结果就是i=1、i=2、i=3、i=4如此直到100,只可惜,这样子的无序输出是错误的。

    如果不信,可以照着这个图片中的代码打出来,真正的输出结果可能会是这样:i=2、i=3、i=4、i=4、i=5这样子,或者相邻两个数打印出来的是一样的。

    如果有想要学习Java的程序员,可来我们的java技术学习扣qun哦:86327,0610里面免费送java的视频教程噢!为什么会出现这样的情况?那是因为,在代码中,变量i是一个integer对象,而当代码中的两个线程执行的时候,i++的实际逻辑却是这样的:i = Integer.valueOf(i.intValue + 1);

    Integer.valueOf每次返回的时候,都是一个新的Integer对象,所以,打印出来的并不是你想要的结果。

    调出class文件,通过jdk自带的javap命令工具,对 MyRunnable.class 进行分析,在虚拟机中可以看着i++的执行原理。

    其实这个逻辑,用一句简短的代码表示出来,就是i = Integer.valueOf(i.intValue + 1);”

    再看一下查看Integer的源码,发现 Integer.valueOf 每次都是新对象。

    public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

    return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);}

    真相大白,程序执行的真相并不是你想想中的那样,你想让程序做什么就做什么,这其中可能含有你不知道的一些问题,这就是为什么说Java程序员到了一定的地步,需要去看源码的原因,这能够帮助你更好得了解代码的编译机制,有利于你的职业成长。

    相关文章

      网友评论

        本文标题:JJava程序员的一段基础逻辑代码!却有很多人的结果是错的

        本文链接:https://www.haomeiwen.com/subject/apfvnftx.html