Java 关于final关键字的一个疑惑!求解答!
--------------------编程问答-------------------- http://bbs.csdn.net/topics/390276349应该会对你有点帮助
--------------------编程问答-------------------- final 声明后的变量只能在写FINAL的时候给它赋值,否则你再给它赋值它的值也不会有任何的改变了。 --------------------编程问答-------------------- 编译期间能确定不变的会宏替换,情况貌似有几种,印象中java 规范中有一段专门列举了出来。 --------------------编程问答-------------------- final修饰一个对象后 这个对象就相当于宏 str3+str3在编译时就会确定其值 并存到缓冲池中 当然结果就是true了 --------------------编程问答-------------------- java没有 宏 这个概念 --------------------编程问答-------------------- final (最终的)
被final所修饰的属性和方法,类,是终态的方法,属性,类;被修饰的方法不能被继承,也就是不能当父类;被final所修饰的方法不能被重写,只能被继承;被final修饰的属性的值不能被改变;
// 定义3个final实例变量
final String str1;
final String str2;
final String str3 = "Java";
你这儿定义了,后面的语句是不能改变其赋值的,并且“宏”这个定义在java中,是不正确的,在C语言中有宏文本替换 这一说。 --------------------编程问答-------------------- final String str3 = "Java";
这个在编译期就完成了,其它的都是在运行期才可以,所以只有这个可以内部优化。
但,我个人认为,不要依赖编译器的优化才好。 --------------------编程问答--------------------
难怪没听过。。。原来根本就没有... --------------------编程问答-------------------- 这个也许有帮助:
http://www.jforeach.com/compile-time-constants-in-java/116 --------------------编程问答--------------------
由 http://www.jforeach.com/compile-time-constants-in-java/116
可知,“编译时常量”的条件有四个:
They must be declared final
They are of primitive data types or String
They must be initialized with their declaration.
Their value must be constant expression.
--------------------编程问答--------------------
public class FinalInitTest {
final String str1;
final String str2;
final String str3 = "Java";
final String str4 = str3;
final String str5 = str4 + "Java";
{
str1 = "Java";
}
public FinalInitTest() {
str2 = "Java";
}
public void display() {
System.out.println(str1 + str1 == "JavaJava");
System.out.println(str2 + str2 == "JavaJava");
System.out.println(str3 + str3 == "JavaJava");
System.out.println(str4 + str4 == "JavaJava");
System.out.println(str4 + str5 == "JavaJavaJava");
}
public static void main(String[] args) {
new FinalInitTest().display();
}
}
// 运行结果为:
// run:
// false
// false
// true
// true
// true
// BUILD SUCCESSFUL (total time: 0 seconds)
嗯,对的。
补充:Java , Java SE