我们到底什么时候应该使用“public static final String”?

新手上路,请多包涵

我见过很多代码,人们在其中编写 public static final String mystring = ... 然后只使用一个值。

为什么他们必须这样做?为什么他们必须在使用之前将值初始化为 final

更新

好的,谢谢大家的回答,我明白这些关键的含义(公共静态最终)。我不明白的是为什么人们使用它,即使常量只会在一个地方并且只在同一个类中使用。为什么要声明呢?为什么我们不直接使用变量呢?

原文由 storm_buster 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

final 表示变量的值不会改变 - 换句话说,一个 _常量_,其值在声明后不能修改。

使用 public final static String 当你想创建一个 String 时:

  1. 属于类( static :没有必要使用它的实例),即
  2. 不会改变( final ),例如当你想定义一个 String 常量,该常量将可用于该类的所有实例,以及使用该类的其他对象,并且那
  3. 将是该类向世界展示的界面的可公开访问的部分。

例子:

 public final static String MY_CONSTANT = "SomeValue";

// ... in some other code, possibly in another object, use the constant:
if (input.equals(MyClass.MY_CONSTANT)

相似地:

 public static final int ERROR_CODE = 127;

不需要 使用 final ,但它可以防止常量在程序执行期间被无意更改,并作为变量是常量的指示器。

即使常量只会在当前类中和/或仅在一个地方使用 - 读取 - 将所有常量声明为 final 是一种很好的做法:它更清晰,并且在代码的生命周期中常量最终可能会在多个地方使用。

此外,使用 final 可能允许实现执行一些优化,例如通过内联使用常量的实际值。

最后请注意 final 只会从原始类型中生成真正的常量值, String 是不可变的,或其他不可变类型。将 final 应用于对象(例如 HashMap )将使 引用 不可变,但对象的状态不是:例如可以更改对象的数据成员,数组元素可以更改,并且可以操作和更改集合。

原文由 pb2q 发布,翻译遵循 CC BY-SA 4.0 许可协议

  1. 静态意味着……您可以在不实例化类或使用任何对象的情况下使用它。
  2. final..这是一个关键字,用于使字符串常量。您不能更改该字符串的值。看下面的例子:
      public class StringTest {
              static final String str = "Hello";
     public static void main(String args[]) {
              // str = "world"; // gives error
              System.out.println(str); // called without the help of an object
              System.out.println(StringTest.str);// called with class name
                }
            }

谢谢

原文由 Omar Faroque Anik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题