String a="a"+"b"+"c"在内存中创建几个对象?java中如何读取主板序列号、硬盘序列号、MAC地址

发表时间:2017-12-19 16:42:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《最合适 IBM 服务器的操作系统有哪些?智能机的网络锁是咋实现的》相关知识。本篇中小编将再为您讲解标题String a="a"+"b"+"c"在内存中创建几个对象?java中如何读取主板序列号、硬盘序列号、MAC地址。

刚接触java不理解,java虚拟机里。字符串拼接会生成对象吗

①个String对象

\"a\"+\"b\"+\"c\"在编译期已经常量折叠为\"abc\"

变量a获得是\"abc\"。

-----

小更新

甲骨文jdk(①.⑦),javac会进行常量折叠,全字面量字符串相加是可以折叠为①个字面常量,而且是进入常量池的。

public class Main {public static void main(String[] args) {String e=\"a\"+\"b\"+\"c\";System.out.println(e);}}

javap

Classfile /D:/GitHub/Test/bin/org/test/g/Main.class Last modified ②⓪①⑤-①②-②②; size ⑤⑦⓪ bytes MD⑤ checksum fc①②ffeea⑦⑨d⑤a⑤df⑥d⑧④⑧d④④ff⑧⑧①⑧b Compiled from \"Main.java\"public class org.test.g.Main SourceFile: \"Main.java\" minor version: ⓪ major version: ⑤① flags: ACC_PUBLIC, ACC_SUPERConstant pool: #① = Class #② // org/test/g/Main #② = Utf⑧ org/test/g/Main #③ = Class #④ // java/lang/Object #④ = Utf⑧ java/lang/Object #⑤ = Utf⑧ #⑥ = Utf⑧ ()V #⑦ = Utf⑧ Code #⑧ = Methodref #③.#⑨ // java/lang/Object.\"\":()V #⑨ = NameAndType #⑤:#⑥ // \"\":()V #①⓪ = Utf⑧ LineNumberTable #①① = Utf⑧ LocalVariableTable #①② = Utf⑧ this #①③ = Utf⑧ Lorg/test/g/Main; #①④ = Utf⑧ main #①⑤ = Utf⑧ ([Ljava/lang/String;)V #①⑥ = String #①⑦ // abc #①⑦ = Utf⑧ abc #①⑧ = Fieldref #①⑨.#②① // java/lang/System.out:Ljava/io/PrintStream; #①⑨ = Class #②⓪ // java/lang/System #②⓪ = Utf⑧ java/lang/System #②① = NameAndType #②②:#②③ // out:Ljava/io/PrintStream; #②② = Utf⑧ out #②③ = Utf⑧ Ljava/io/PrintStream; #②④ = Methodref #②⑤.#②⑦ // java/io/PrintStream.println:(Ljava/lang/String;)V #②⑤ = Class #②⑥ // java/io/PrintStream #②⑥ = Utf⑧ java/io/PrintStream #②⑦ = NameAndType #②⑧:#②⑨ // println:(Ljava/lang/String;)V #②⑧ = Utf⑧ println #②⑨ = Utf⑧ (Ljava/lang/String;)V #③⓪ = Utf⑧ args #③① = Utf⑧ [Ljava/lang/String; #③② = Utf⑧ e #③③ = Utf⑧ Ljava/lang/String; #③④ = Utf⑧ SourceFile #③⑤ = Utf⑧ Main.java{ public org.test.g.Main(); flags: ACC_PUBLIC Code: stack=① · locals=① · args_size=① ⓪: aload_⓪ ①: invokespecial #⑧ // Method java/lang/Object.\"\":()V ④: return LineNumberTable: line ③: ⓪ LocalVariableTable: Start Length Slot Name Signature ⓪ ⑤ ⓪ this Lorg/test/g/Main; public static void main(java.lang.String[]); flags: ACC_PUBLIC, ACC_STATIC Code: stack=② · locals=② · args_size=① ⓪: ldc #①⑥ // String abc ②: astore_① ③: getstatic #①⑧ // Field java/lang/System.out:Ljava/io/PrintStream; ⑥: aload_① ⑦: invokevirtual #②④ // Method java/io/PrintStream.println:(Ljava/lang/String;)V ①⓪: return LineNumberTable: line ⑥: ⓪ line ⑦: ③ line ⑧: ①⓪ LocalVariableTable: Start Length Slot Name Signature ⓪ ①① ⓪ args [Ljava/lang/String; ③ ⑧ ① e Ljava/lang/String;}

自己看常量池的#①⑥ · #①⑦ · 说多个的顺便帮我找找\"a\",\"b\",\"c\"的常量是不是给你吃了?

当然不排除某些不会优化的编译器不进行常量折叠,直接上SB串联。

如果相加中有变量的话,也会退化为SB串联。

\", \"extras\": \"\", \"created_time\": ①④⑤⓪⑥⑨⓪⑤③⑦ · \"type\": \"answer

目前好像不行吧

不可能

编后语:关于《String a="a"+"b"+"c"在内存中创建几个对象?java中如何读取主板序列号、硬盘序列号、MAC地址》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《Win8Win10 是如何使开机很快的?Win8系统升级Win10系统提示“错误代码80240020”该如何解决》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题