我有一个与 Java 中参数化 string.format() 相关的问题:
final
修改string.format()
变量吗?private static final String ERROR_SCHEMA_INVALID = "Schema validation failed: %s";
log.error(String.format(ERROR_SCHEMA_INVALID, e.getMessage()));
背景
final
不能更改其对另一个对象的引用。
例如,final String a = "hi";
a = "bye"; //Compile error
String
是不可变的。这意味着一旦实例化字符串对象,其中的字符就无法更改。String 类提供了处理字符串对象的方法,但它不是修改字符串对象本身,而是返回一个新字符串。
回答
答案是否定的。无法更改已初始化的
final
变量以引用另一个对象(反射除外)。
你的代码是怎么回事
String.format
并传入参数ERROR_SCHEMA_INVALID
,即"Schema validation failed: %s"
和e.getMessage()
。"Schema validation failed: %s"
类似的新字符串,只不过 %s
被替换为 e.getMessage()
。 (它内部使用格式化程序)该方法不会以任何方式干扰您的变量,而且也不能。
在设计方面,如果您想添加“Schemavalidationfailed:”作为与您的程序相关的所有错误消息的前缀,那么就可以了。