在上一篇文章中,小编为您详细介绍了关于《最合适 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”该如何解决》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器