final int a = 100;
final Integer i = new Integer(100);final所修饰简单对性和复合对象的区别?

解决方案 »

  1.   

    final int a = 100;内存分配更省点吧
      

  2.   

    从 final 这个关键字来看,没有区别int 和 Integer 的区别  是 一个是原始数据类型,一个是封装类Map<Integer,String>是可以的,int就不行。
    而且int没有方法
      

  3.   

    final int a = 100;                    是声明一个final常量  此变量值是不能改变的。
    final Integer i = new Integer(100);   声明一个final引用,它只能恒定指向一个对象,无法将其改变指向另一个对象
      

  4.   

    用 final 修饰之后,表示楼主的 a, i 两个变量不能被重新赋值如果是类的非静态成员变量,则必须在声明时初始化,或者在构造方法中初始化如果是类的静态成员变量,则必须在声明时初始化,或者在类的静态块中初始化
      

  5.   


        final int a  = 100;
        final StringBuffer sb = new StringBuffer();
        a = 100;//这样会报错
        sb = new StringBuffer();//这样也会报错
        sb.append("OK");//这样就没问题final修饰基本类型,就是该变量的值不变;而修饰对象的时候,是该对象的引用不能变,里面的值可以修改的!
      

  6.   

       i指向Integer 
      

  7.   

    学习到的总结如下:
    int 和 Integer 的区别 是 一个是原始数据类型,一个是封装类
    final int a = 100; 是声明一个final常量 此变量值是不能改变的。
    final Integer i = new Integer(100); 声明一个final引用,它只能恒定指向一个对象,无法将其改变指向另一个对象
      

  8.   

    如果用final修饰一个对象,那么它只能恒定指向一个对象,但是可以改变对象的内容!
      

  9.   

    final修饰 基本类型,那么所修饰的基本类型的值就不可以被修改final修饰 引用,只是说,该引用只可以永远指向初始分配的对象,不可以在指向其他的。但是对象中的内容,是可以同个final修饰的这个引用,或者别的指向这个对象的引用,来修改!
      

  10.   

    final int a = 100;
    标记 a 为不可变的常量。final Integer i = new Integer(100);
    标记 i 只能指向初期化时的那个对象! 不能再指向别的对象! 但是 ----   这个对象的值是可以被改变的!! 但是 ---- 你的这个例子有些特殊, 因为 Integer 和 String 一样具有不可变性, 所以在本例中, 对象的值也不能改变了!
      

  11.   

    final去修饰一个变量,表示这个变量为常量,不能再被重新赋值。
    举例:
    ----------
    final int i = 1;
    i=2;//这里将发生编译错误
    ----------
    final int i = 1;
    i=1;//同样也将发生错误,所以final去修饰变量。
    ----------
    //而这样是可以的,所以进一步说明,final修饰变量的时候,只能进行一次显式赋值。
    final int i;
    i = 1;
    ----------
    Integer integer = 2;
    final Integer i = integer;
    i = integer;    //依然不行,更能说明上面的问题。
    ----------
    final Integer i = null;
    i = new Integer(2); //依然会报错,所以就算初次所赋值为空值也不能改变。
    ----------
    //but ......
    final StringBuffer strB = new StringBuffer("123");
    strB.append("456");
    System.out.println(strB);
    //以上却是可以执行的,打印结果为"123456"。
    ----------
    总结:被final修饰后的变量只能进行一次赋值,所以,它所持有的到对象的引用是不能变的(不能先指向A对象,继而指向B对象),但是它所引用的对象本身在内存中的值却是可以改变的。
    ----------
    用final修饰类,则表示此类不能被继承。因此,final不能作用于抽象类和接口。
    用final修饰方法,表示这个方法不能被重写(但是可以重载)。
    -----------
    其实综上所述:
    final就是用来限制一个栈空间里的内存指引不能发生改变。
    包括Method或Class也是一样,可以用这句话解释。
      

  12.   

    final修饰变量代表该变量为常量,其本身不能改变。如果是基本数据类型那么该值是不能改变的。
    比如   final int i =10;
    那么i的值是不能改变的。但是如果是复合数据类型,那么是其引用(也叫句柄)不能改变
    比如  final StringBuffer test = new StringBuffer("Hello");
    那么其引用不能改变的意思是test不能再指向其他对象了
    test  = new StringBuffer("");//报错
    但是在不更改其句柄的情况下修改其值是可以的。
    test.append("World");//正确