我们可以通过参数化 string.format() 调用来修改 Final 变量吗?

问题描述 投票:0回答:1

我有一个与 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()));
java string.format
1个回答
1
投票

背景

  1. 声明的变量
    final
    不能更改其对另一个对象的引用。 例如,
final String a = "hi";
a = "bye"; //Compile error
  1. String
    是不可变的。这意味着一旦实例化字符串对象,其中的字符就无法更改。

String 类提供了处理字符串对象的方法,但它不是修改字符串对象本身,而是返回一个新字符串。

回答

答案是否定的。无法更改已初始化的

final
变量以引用另一个对象(反射除外)。

你的代码是怎么回事

  1. 您调用静态方法
    String.format
    并传入参数
    ERROR_SCHEMA_INVALID
    ,即
    "Schema validation failed: %s"
    e.getMessage()
  2. 该方法创建一个与
    "Schema validation failed: %s"
    类似的新字符串,只不过
    %s
    被替换为
    e.getMessage()
    。 (它内部使用格式化程序)
  3. 该方法返回新字符串。

该方法不会以任何方式干扰您的变量,而且也不能。

在设计方面,如果您想添加“Schemavalidationfailed:”作为与您的程序相关的所有错误消息的前缀,那么就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.