Java 如何在Intellij Idea中找到静态字符串结果串联而不运行代码?
代码示例:Java 如何在Intellij Idea中找到静态字符串结果串联而不运行代码?,java,string,intellij-idea,Java,String,Intellij Idea,代码示例: public class StringHolder{ public static final String ONE = "ONE"; public static final String TWO = "TWO"; public static final String THREE = "THREE"; public static void main (String[] args){ String someVariable = ONE +
public class StringHolder{
public static final String ONE = "ONE";
public static final String TWO = "TWO";
public static final String THREE = "THREE";
public static void main (String[] args){
String someVariable = ONE + TWO + THREE;
}
}
如何从静态常量计算字符串值?。例如,使用Intellij Idea,我可以在调试中运行程序,放置断点,在表达式上按“ctrl+alt+f8”,然后查看表达式值。那个么,在并没有编译代码和运行程序的情况下,是否可以使用静态分析器对此进行评估?
关键点是从静态常数计算的值,而不是从函数参数计算的值,因此analyzer只需“转到”常量值,将它们连接起来,并在弹出窗口中显示值
当我有一个块和“刚刚初始化”变量时的另一种情况:
{
final String a = "a";
final String b = "b"
final String c = "c"
String result = a+b+c;
}
另外,你明白我的意思吗?:) 通过反编译字节码,您可以看到编译时连接的字符串
“onetwotree”
:
javap -c StringHolder
看看第一份作业
first+second+third
的连接仍将在执行时而不是编译时完成,因此我希望看到使用StringBuilder
或StringBuffer
的代码,并且在不运行代码的情况下不会出现字符串连接的“结果”
public static final String ONE = "ONE";
public static final String TWO = "TWO";
public static final String THREE = "THREE";
是编译时常量,将在编译时内联
因此,您可以在反编译生成的.class
文件中看到结果。另一个结果在运行时之前不可见
对于someVariable
您将看到类似someVariable=“onetwotree”反编译代码中的code>。编译器这样做是为了优化,因此是可见的 使用intellij idea 14很容易:
只需将光标放在字符串连接上
按alt+enter键
选择“将字符串连接文本复制到剪贴板”
将结果粘贴到某个地方
在哪里看到它?您的问题不完整。谢谢,请注意,您只能使用最终变量和文字。否则,你会得到什么?谢谢。有用的捷径。请注意,在极少数情况下,串联不是真的。例如stringtext='A'+1+“”代码>此快捷方式将复制到剪贴板“A1”,而不是文本的实际值(66)。IntelliJ版本2016.3它们将不会内联。他们将被集中起来,这恰恰相反。