Java中变化无常的常量
程序员文章站
2022-05-25 23:18:04
...
Java中变化无常的常量
问题:
第一版:
直接编译UserConstantsTest,编译过程中会检测到UserConstants尚未编译,然后会编译UserConstants
运行结果如图所示:
第二版:
只修改UserConstants,并且只重新编译UserConstants,得到结果如下图所示:
运行结果如图所示:
原因:
Java编译器会讲常数值编译到UserConstantsTest 的指令码或者常量池中,当UserConstantsTest使用这些常量时直接使用保存在类文件中的副本,但是null不是常量值,不受此限。
解决:
第一种:使用get方法来获取常量值
第二种:使用ident方法来获取常量值
参考:
Inconstant Constants in Java:http://www.javaworld.com/community/node/3400
问题:
第一版:
直接编译UserConstantsTest,编译过程中会检测到UserConstants尚未编译,然后会编译UserConstants
public class UserConstants { public static final String USER_NAME = "admin"; public static final String PASSWORD = "123456"; public static final String DESCRIPTION = null; }
public class UserConstantsTest { public static void main(String[] args) { System.out.println("User Name: " + UserConstants.USER_NAME); System.out.println("Password: " + UserConstants.PASSWORD); System.out.println("Description: " + UserConstants.DESCRIPTION); } }
运行结果如图所示:
第二版:
只修改UserConstants,并且只重新编译UserConstants,得到结果如下图所示:
public class UserConstants { public static final String USER_NAME = "root"; public static final String PASSWORD = "123456789"; public static final String DESCRIPTION = "This is root account"; }
运行结果如图所示:
原因:
引用
First, true constant variables are inlined.
Second, null is not a constant variable and thus is not inlined and so the actual constant on the classpath is used in that case.
Second, null is not a constant variable and thus is not inlined and so the actual constant on the classpath is used in that case.
Java编译器会讲常数值编译到UserConstantsTest 的指令码或者常量池中,当UserConstantsTest使用这些常量时直接使用保存在类文件中的副本,但是null不是常量值,不受此限。
解决:
第一种:使用get方法来获取常量值
public static final String USER_NAME = "admin"; public static String getUserName () { return USER_NAME; }
第二种:使用ident方法来获取常量值
private static String ident(final String constant) { return constant; } public static final String USER_NAME = ident("root"); public static final String PASSWORD = ident("123456789"); public static final String DESCRIPTION = ident("This is root account");
参考:
Inconstant Constants in Java:http://www.javaworld.com/community/node/3400
下一篇: 南丫岛好玩吗 南丫岛介绍