• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

JAVA: String 和 final String

String s1 = "a";  String s2 = "b";  String s3 = "ab";String s6 = s1+s2;  System.out.println("s3==s6 -> "+ (s3==s6));final String s8 = "a" ;   final String s9 = "b" ;  String s10 = s8 + s9; System.out.println("s3==s10 -> "+ (s3==s10)); output:s3==s6 -> falses8==s1 -> true字节码:0: ldc           #16                 // String a   2: astore_13: ldc           #18                 // String b   5: astore_26: ldc           #20                 // String ab  8: astore_3// s6的过程,这个我知道17: new           #22                 // class java/lang/StringBuilder20: dup21: aload_122: invokestatic  #24                 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;25: invokespecial #30                 // Method java/lang/StringBuilder."":(Ljava/lang/String;)V28: aload_229: invokevirtual #33                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;32: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;35: astore // 下面是问题// 同样是相加,为什么s10不走s6的过程? 而是直接取#20。48: ldc           #16                 // String a     //s850: astore        852: ldc           #18                 // String b    //s954: astore        956: ldc           #20                 // String ab    /s1058: astore        10

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

可能是 javac 比较智能吧,看到相加的两个变量都是 用 final 修饰的,所以认为结果也应该是常量,然后就在编译过程中算好了,正好又发现 “ab”已经存在,于是就拿过来用了

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!