相关疑难解决方法(0)

Kotlin Bytecode - 如何在IntelliJ IDEA中进行分析?

我想看看编译后的字节码,这样我就可以了解它在封面下的工作原理.我正在使用IntelliJ IDEA 15,但找不到查看字节码的方法.我错过了什么?

intellij-idea kotlin android-studio jvm-bytecode

59
推荐指数
2
解决办法
7169
查看次数

字符串常量池

由于这些问题#1说明:问题1问题2我的理解是" 字符串常量 "被拘留时:

String s = "abc"; 
Run Code Online (Sandbox Code Playgroud)

在以下情况下,JVM将创建一个新的String对象,而不是使用String Pool中的现有对象:

String s = new String("abc");
Run Code Online (Sandbox Code Playgroud)

但是,在阅读以下两个类似的陈述后,我有一个疑问.

当编译器遇到String文本时,它会检查池以查看是否已存在相同的String.如果找到匹配项,则对新文本的引用将定向到现有String,并且不会创建新的String文本对象.

在这种情况下,由于关键字"new",我们实际上最终会遇到略微不同的行为.在这种情况下,对字符串文字的引用仍然放在常量表(String Literal Pool)中,但是,当你来到关键字"new"时,JVM必须在运行时创建一个新的String对象,而不是使用常量表中的那个.

因此,当我们使用"new"并基于上面的定义创建对象时,我们还在非池内存池内存中放置引用.当我们这样做时,JVM是否也应该返回相同的引用?:

String one = new String("test");
String two = "test";

System.out.println(one.equals(two)); // true
System.out.println(one == two);      // false
Run Code Online (Sandbox Code Playgroud)

因为在声明字符串文字时String three = "test";它会存在于池中吗?因此应该返回相同的参考和打印真实?或者之前的陈述是否意味着它们将被放入池内存中,但只是在使用new运算符时跳过?

java

24
推荐指数
2
解决办法
2万
查看次数