10.使用final关键字修饰一个变量时...

时间:2022-04-22 18:21:01

10.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

        答:引用不能变,不能将引用再次指向另一个新的对象,但引用所指向的对象中的内容是可以改变的。

补充:

    1.对于基本类型,final使数值恒定不变,而用于对象引用,final使引用恒定不变。

    2.一个既是static又是final的域只占据一段不能改变的存储空间。

    3.定义为public,则可以被用于包之外;定义为static,则强调只有一份;定义为final,则说明他是一个常量。

    4.带有恒定初始值(即编译其常量)的final static基本类型全用大写字母命名,并且字与字之间用下划线隔开。

11.“==”和equals方法究竟有什么区别?

    Java中的数据类型,可以分为两类:

    一.基本数据类型:

                 数值型 :(整数类型byte,short,int,long)(浮点类型float,double)

                 字符型 :char

                 布尔型 :boolean

        他们之间的比较,应该用双等会(==),比较的是他们的值。

    二.引用数据类型:

                 类 :class

                 接口 :interface

                 数组 :[ ]

         当他们用==进行比较的时候,比较的是对象的引用。

  说明:java当中所有的类都继承于Object这个基类,在object中的基类定义了一个equals方法,public boolean equals(Object obj) {

     return  ( this  == obj); } 这个方法的初始行为是比较引用,但在一些类库中这个方法被覆盖掉了,如String,Integer,Date等在这些类中equals有其自身的实现,而不再是比较对象在栈内存中的地址(即引用)了,如果不覆盖,则equals默认行为是比较引用。
     对于引用数据类型之间进行equals比较,在没有覆盖equals方法的情况下,他们之间的比较还是基于对象的引用,因为object的equals方法也是用==进行比较的,所有比较后的结果与双等号的结果相同。eg:
              class Value {

                    int i ;

                }

               public class EqualsDemo {

                     public static void main(String args[]){

                          Value v1=new Value();

                          Value v2=new Value();

                          v1.i=v2.i=100;

                          System.out.print(v1.equals(v2));

                 }

            } /*Output:false