字符串和最终
以下语句之间的区别是什么
String name = "Tiger";
final String name ="Tiger";
虽然类是类,为什么我们需要创建一个字符串“CONSTANT”变量作为 final?String
final
以下语句之间的区别是什么
String name = "Tiger";
final String name ="Tiger";
虽然类是类,为什么我们需要创建一个字符串“CONSTANT”变量作为 final?String
final
final
在此上下文中,意味着变量只能赋值一次。再次为其分配不同的对象会导致编译错误。name
String
我认为这里混淆的根源在于关键字可以在几种不同的上下文中使用:final
请参阅维基百科上关于Java中final的文章,了解每种情况的示例。
在这两种情况下,“最终”意味着不同的东西。
java.lang.String 类是最终类。这意味着您无法从中继承。
变量“name”是最终的,这意味着您无法将其更改为指向 String 的其他实例。因此,非最终 String 变量不是常量,因为您可以在两个不同的时间读取它并获得不同的值。
碰巧的是,Java 字符串对象也是不可变的。这意味着您无法修改特定 String 对象表示的值。将其与数组进行比较 - 您可以将数组对象的第一个元素替换为其他对象,但不能将 String 对象的第一个字符替换为其他字符。这就是为什么 String.replace() 返回一个新字符串 - 它不能修改旧字符串。
String 是 final 的一个原因是防止传递 String 子类的实例,该子类实现可变行为,代替 String。
但是,是否可以修改特定对象,以及是否可以将不同的对象分配给变量,则是完全不同的概念。一个是 String 对象的属性,另一个是 String 变量的属性,它们是对 String 对象的引用。