0

当我声明如下内容时会发生什么:

public static final String forma = "Rectangular";

不是多余的吗?作为 String 一个最终类,它会改变什么而不设置forma为最终类?对于static,我认为它没有做出任何改变。

4

5 回答 5

3

final确保没有将引用分配给新值。

如果您不成功final,则可以为(或)分配其他值是有效的,forma您可以对其进行一些操作Rectangular并将结果分配回forma

于 2013-09-30T04:49:55.440 回答
1

对于对象类型,'final' 修饰符意味着不能更改对这个对象的引用,而不是它的值!

于 2013-09-30T04:50:37.823 回答
1

请参阅String 是一个最终类,并且 final关键字使引用最终不是对象最终。
最终对象意味着它不能被更改,但最终引用意味着它在第一次分配后不能分配给另一个对象。

作为最终意味着你不能修改对象String s="hello""hello"是字符串对象并且它不能被修改,但是s如果它是一个非最终引用并且我做这样的事情:s=s.concat("bing")那么,"hello"被采取可以与"bing"对象连接然后分配给s意味着"hello" and "bing"对象是没有修改他们失去了他们的引用和非最终引用s现在指的是一个新的对象"hellobing"
如果您觉得这很有趣,我当然想为您提供更多帮助。

于 2013-09-30T04:51:36.027 回答
0

不是多余的吗?

不,这不是多余的。它是恒定的。该语句的每个关键字都有意义。final使其不可变static使其成为类变量public使其全局可访问

于 2013-09-30T04:50:27.680 回答
0

final关键字被重载,在不同的上下文中意味着非常不同的东西:

  • 在字段和局部变量上,表示引用的内容不能改变。(这与不变性不同。)
  • 在类上,它表示该类不能被子类化。
  • 在方法上,它表示该方法不能在子类中被覆盖。
于 2013-09-30T05:30:36.397 回答