当我声明如下内容时会发生什么:
public static final String forma = "Rectangular";
不是多余的吗?作为 String 一个最终类,它会改变什么而不设置forma
为最终类?对于static
,我认为它没有做出任何改变。
final
确保没有将引用分配给新值。
如果您不成功final
,则可以为(或)分配其他值是有效的,forma
您可以对其进行一些操作Rectangular
并将结果分配回forma
对于对象类型,'final' 修饰符意味着不能更改对这个对象的引用,而不是它的值!
请参阅String 是一个最终类,并且 final关键字使引用最终不是对象最终。
最终对象意味着它不能被更改,但最终引用意味着它在第一次分配后不能分配给另一个对象。
作为最终意味着你不能修改对象String s="hello"
,"hello"
是字符串对象并且它不能被修改,但是s
如果它是一个非最终引用并且我做这样的事情:s=s.concat("bing")
那么,"hello"
被采取可以与"bing"
对象连接然后分配给s
意味着"hello" and "bing"
对象是没有修改他们失去了他们的引用和非最终引用s
现在指的是一个新的对象"hellobing"
。
如果您觉得这很有趣,我当然想为您提供更多帮助。
不是多余的吗?
不,这不是多余的。它是恒定的。该语句的每个关键字都有意义。final
使其不可变,static
使其成为类变量并public
使其全局可访问。
final
关键字被重载,在不同的上下文中意味着非常不同的东西: