You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串拼接的运算结果是否属于编译时常量?

Java编译时常量折叠规则

你遗漏的是Java的**编译时常量折叠(Constant Folding)**相关的特性,具体规则如下:

  • 当字符串拼接操作的所有操作数都是编译时常量时,编译器会在编译阶段直接完成拼接运算,生成的结果也会作为编译时常量处理,不需要到运行时再执行计算。
  • 编译时常量的判定规则包括:
    • 字面量(包括字符串字面量、基础类型字面量)本身属于编译时常量
    • 用final修饰的、在编译期就确定了取值的常量变量(constant variable)也属于编译时常量
    • 多个编译时常量做简单运算(算术运算、字符串拼接等)的结果,同样会被判定为编译时常量

回到你给出的代码:
String first = "rat" + 1;
其中"rat"是字符串字面量,1是int类型字面量,二者都属于编译时常量,编译器会在编译阶段直接把二者拼接成"rat1",等价于你直接写String first = "rat1";,所以结果自然会被存入字符串常量池。

注意:如果拼接的操作数里有非常量(比如普通变量、方法返回值等),就不会触发编译期折叠,才会在运行时生成新的字符串对象。比如以下代码就不会生成编译时常量:

String s = "rat";
String first = s + 1; // s是普通变量,不会触发折叠

内容的提问来源于stack exchange,提问作者Oğuzcan Budumlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:04