资讯专栏INFORMATION COLUMN

关于"a"+"b"共创建了几个对象的问题

lavor / 354人阅读

摘要:首先,我们先看下以下代码的输出情况将这段代码反编译后得到如下结果重点是这句,可以发现从一开始就是一个整体,这是因为在编译时就去掉其中的加号,直接将其编译成一个相连的结果存入了常量池,而不是等到运行时再去进行相加,所以运行结果为结论只创建了一

首先,我们先看下以下代码的输出情况

String s = "a" + "b";
System.out.println(s == "ab"); //  true

将这段代码反编译后得到如下结果

  public static void main(java.lang.String[]);
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String ab
       2: astore_1
       3: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
       6: aload_1
       7: ldc           #2                  // String ab
       9: if_acmpne     16
      12: iconst_1
      13: goto          17
      16: iconst_0
      17: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
      20: return

重点是这句0: ldc #2 // String ab,可以发现 从一开始"a"+"b"就是一个整体,这是因为jvm在编译时就去掉其中的加号,直接将其编译成一个相连的结果存入了常量池,而不是等到运行时再去进行相加,所以运行s=="ab"结果为true;
结论:
String s = "a" + "b";只创建了一个对象,就是ab,存于常量池中。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73364.html

相关文章

  • 使用JS实现简单图片切换功能

      我们今天就说说用JS实现图片的切换,效果如图:  分析:要实现切换,先有一个按钮添加点击响应时间,可以用构造函数。切换图片实现动作可以用切换img标签src的属性,可以获取标签属性然后进行修改即可。就要把属性值存放在一个数组中,通过数组的索引来获取。  附上相关代码:  css部分代码:  <styletype="text/css">   *{   margin...

    3403771864 评论0 收藏0
  • 解说JS创建对象常用设计模式工厂构造函数及原型

      设计模式对于很多人都十分陌生,本篇文章就是为大家讲述关于用JS创建对象常用设计模式工厂构造函数及原型。  先说说,工厂模式  简单来说,工厂模式就是如同在现实社会生活中,市场通过不同工厂加工成不同的产品。  转化成JS代码就是这样的:  //汽车工厂   functioncarFactory(brand,price,district){   leto=newObject();   o.bran...

    3403771864 评论0 收藏0
  • python现矩阵实现代码

      小编写这篇文章的主要目的,主要是给大家介绍,关于python中,共现矩阵代码实现方式的问题,下面就给大家进行详细的解答。  python共现矩阵实现 最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。  项目背景  本人利用搜索引擎爬虫,以此用来获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键词,对这些关键词进行共现矩阵的可视...

    89542767 评论0 收藏0
  • python中关于闭包用法详解

      小编写这篇文章的主要目的,主要是来给大家介绍,关于python中,相关语法问题的解答,比如在python,我们会遇到闭包和装饰器不会用的情况,那么,下文就会来给大家做一个详细的解答。  *args与**kwarsg及闭包和装饰器  过程  先理解闭包,再理解装饰器,不要忘了不定长参数 deffunc():   msg='111'   deffunc1():   print(ms...

    89542767 评论0 收藏0
  • Vim 文本对象指南 (2)

    摘要:接文本对象指南关于插件使用可以查看完整配置编程语言的文本对象基于常见编程语言结构提供了几个常见的文本对象其实都是一对儿符号,主要可以分为成对的标点符号,比如单引号,双引号,反引号。而非文本对象操作时,会从当前光标处开始生效。 接 Vim 文本对象指南 (1), 关于插件使用, 可以查看完整配置 space-vim. 编程语言的文本对象 Vim 基于常见编程语言结构提供了几个常见的文本...

    awesome23 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<