Java 如何处理最后的字符串?

Java 如何处理最后的字符串?,java,string,types,Java,String,Types,将字符串设为final有什么好处吗?或者我们可以将字符串设为final吗?我的理解是,由于字符串是不可变的,所以没有必要将其设为final,这是正确的还是人们希望将字符串设为final 代码: 这意味着该变量甚至不能指向其他字符串 (是的,字符串对象是不可变的……但是变量可以指向字符串的不同实例。除非它是最终的。) (编辑--在您的示例中,您没有命名变量 final String x = "test"; )final表示引用不能更改,值不能更改。不管最后一个是什么,字符串总是不可变的 fina

字符串设为final
有什么好处吗?或者我们可以将
字符串设为final
吗?我的理解是,由于字符串是不可变的,所以没有必要将其设为final,这是正确的还是人们希望将
字符串设为final

代码:

这意味着该变量甚至不能指向其他字符串

(是的,字符串对象是不可变的……但是变量可以指向字符串的不同实例。除非它是最终的。)

(编辑--在您的示例中,您没有命名变量

final String x = "test";

)final表示引用不能更改,值不能更改。不管最后一个是什么,字符串总是不可变的

final String a = "test";
String b = "hello";

a = "world"; // error, a can't change reference to the String object "world"
b = "two"; // ok, b points to a different String object "two"

final
mean变量不能更改

final String s = "abcd";
// later in the code
s = "efgh";  // This will not compile

不可变意味着
String
上有一种方法可以更改其中的内容,例如
setter
append
,等等。

这里一切都很好,但是还有两种方法“处理最终字符串””,正如您所说的,但是在“放置它们的位置”方面:

  • 创建一个包含最终静态变量(和最终字符串)的接口,并在需要的地方实现它,以及
  • 为常量创建一个类并进行静态导入
  • 方法1,在大约10年前很流行,并且可能仍然是拥有大量最终变量集合的地方。
    方法2使用起来很简单,但有点奇怪,因为您可以无条件地引用常量,这使得代码很难理解。

    final
    意味着引用永远不会更改<代码>字符串不变性意味着不同的东西;这意味着当创建
    字符串时(值,而不是引用,即:“文本”),它不能更改

    例如:

    String x = "Strings Are ";
    String s = x;
    
    现在s和x都引用相同的
    字符串。然而:

    x += " Immutable Objects!";
    System.out.println("x = " + x);
    System.out.println("s = " + s);
    
    这将打印:

    x = Strings Are Immutable Objects
    s = Strings Are
    
    这证明创建的任何
    字符串
    都不能更改,并且当任何更改发生时,将创建一个新的
    字符串

    现在,对于
    final
    ,如果我们将x声明为
    final
    ,并尝试更改其值,我们将得到一个异常:

    final String x = "Strings Are ";
    x += " Immutable Objects!";
    
    java.lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable x
    
    例外情况如下:

    final String x = "Strings Are ";
    x += " Immutable Objects!";
    
    java.lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable x
    

    有最后一个字段的一个区别是,因为字符串是不可变的,所以它也可能是静态的

    private final String a = "test";
    
    效率略高,可能更清晰

    private static final String a = "test";
    

    说字符串是不可变的,这实际上意味着什么?我的印象是它的值不能更改,这是final关键字的函数,我的理解不对吗?这意味着你可以说x=“this”;和x=“that”,但没有像x.setValue(“新字符串”)这样的方法;。这不应该是“在
    字符串上没有方法”吗?