当前位置:编程学习 > JAVA >>

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";
这个在编译期就完成了,其它的都是在运行期才可以,所以只有这个可以内部优化。

但,我个人认为,不要依赖编译器的优化才好。 --------------------编程问答--------------------
引用 5 楼 ticmy 的回复:
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)
--------------------编程问答--------------------
引用 7 楼 java2000_net 的回复:
final String str3 = "Java";
这个在编译期就完成了,其它的都是在运行期才可以,所以只有这个可以内部优化。

但,我个人认为,不要依赖编译器的优化才好。

嗯,对的。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,