环境
Java: 1.8+
前言
最近项目发布时,通过配置中心更改配置时,发现配置居然没有生效。
public static final Byte APPEAL_TIME_RANGE = 7;
public static Integer RATE_FREQUENCY = 3;
public static String bb = APPEAL_TIME_RANGE + "天内可以修改" + RATE_FREQUENCY + "次";
public static void main(String[] args) {
String aa = APPEAL_TIME_RANGE + "天内可以修改" + RATE_FREQUENCY + "次";
System.out.println(bb);
System.out.println(aa);
RATE_FREQUENCY = 100;
System.out.println(bb);
System.out.println(aa);
}
发现,修改没有生效,打印结果:
7天内可以修改3次
7天内可以修改3次
7天内可以修改3次
7天内可以修改3次
我的理解是,式子中明明有变量,为什么不是每次执行时,都进行动态拼接呢?
原因
没什么好解释,记住它!!!
字符串 = a + b + c…拼接完成后,不会再进行动态拼接
通过上面的代码测试,我们会发现:
String aa = APPEAL_TIME_RANGE + "天内可以修改" + RATE_FREQUENCY + "次";
public static String bb = APPEAL_TIME_RANGE + "天内可以修改" + RATE_FREQUENCY + "次";
当jvm完成了变量aa和bb的动态拼接后,不会再对变量aa和变量bb进行二次动态拼接。
这也就意味着,当我们企图修改RATE_FREQUENCY 变量值来达到修改整体字符串的值时,将面临失败。
解决办法
没有好的解决办法,就是在使用的地方,直接使用APPEAL_TIME_RANGE + "天内可以修改" + RATE_FREQUENCY + "次" ,而不是将它赋值给某个变量。
总结
字符串完成拼接,赋值给某个变量A后,当多次使用该变量A时,不会再进行二次拼接。即使拼接的式子里有变量也不行。
|