unk*_*own 5 java string string-literals
我知道当池中已经存在一个字符串时,就不会再生成一个新的字符串文字了.
我也知道字符串常量池和堆之间的区别
我只是想知道何时为下面的示例创建了一个类的字符串池.
String s="qwerty";
String s1="qwer"+"ty";// this will be resolved at compile time and no new string literal will be made
String s2=s.subString(1); will create qwerty at run time
s==s1; //true
s==s2;//false
Run Code Online (Sandbox Code Playgroud)
我想知道String s1在编译时被解析是否意味着字符串池是在编译时创建的?
常量池包含String实例,这些实例是运行时工件.显然,在启动它们所使用的程序之前,不能创建对象.指定将创建哪些字符串常量的数据是在编译时准备的,并且是类文件格式的一部分.
但是,请注意,字符串常量是在类加载时创建的,而不是在类初始化时或第一次使用时创建的.这是人们经常混淆的一点.
在您的示例中,差异不在编译时和运行时之间,而是在常量池中创建一次字符串,并在每次执行一行代码时创建它.
另请注意,在OpenJDK中,字符串池已经成为常规堆的一部分(甚至在它成为OpenJDK之前).
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |