本帖最后由 llyypp3314spy 于 2012-11-10 18:20:13 编辑

解决方案 »

  1.   

    http://bbs.csdn.net/topics/390276349
    应该会对你有点帮助
      

  2.   

     final 声明后的变量只能在写FINAL的时候给它赋值,否则你再给它赋值它的值也不会有任何的改变了。
      

  3.   

    编译期间能确定不变的会宏替换,情况貌似有几种,印象中java 规范中有一段专门列举了出来。
      

  4.   

    final修饰一个对象后 这个对象就相当于宏 str3+str3在编译时就会确定其值 并存到缓冲池中  当然结果就是true了   
      

  5.   

    java没有 宏  这个概念
      

  6.   

    final (最终的) 
    被final所修饰的属性和方法,类,是终态的方法,属性,类;被修饰的方法不能被继承,也就是不能当父类;被final所修饰的方法不能被重写,只能被继承;被final修饰的属性的值不能被改变;
     // 定义3个final实例变量
        final String str1;
        final String str2;
        final String str3 = "Java";
    你这儿定义了,后面的语句是不能改变其赋值的,并且“宏”这个定义在java中,是不正确的,在C语言中有宏文本替换 这一说。
      

  7.   

     final String str3 = "Java";
    这个在编译期就完成了,其它的都是在运行期才可以,所以只有这个可以内部优化。但,我个人认为,不要依赖编译器的优化才好。
      

  8.   

    这个也许有帮助:http://www.jforeach.com/compile-time-constants-in-java/116
      

  9.   


    由 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)