Java课堂疑问解答与思考3

一、

两对整数明明完全一样,为何一个输出true,一个输出false

 

答:

整数在小于127时都可以用常量池,因此第一次比较的的地址是取自同一个地址的数字,而第二次比较的数是创建了两个不同地址的对象,所以第一次比较的地址相同,第二次不同。

 二、

Integer类的装箱和拆箱到底是怎样实现的?

答:

下面是代码

public class BoxAndUnbox {
      public static void main(String[] args)

    {
      int value=100;

      Integer obj=value; //装箱

    int result=obj*2; //拆箱

      System.out.println(result);

      System.out.println(obj); 

  }

}

运行结果

在装箱的时候自动调用的是IntegervalueOf(int)方法。而在拆箱的时候自动调用的是IntegerintValue方法。因此可以用一句话总结装箱和拆箱的实现过程:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 intValue方法实现的.

 

三、

静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。

答:

 

源代码:

class Myclass

{

int i=100;    //实例变量

static public void output(){

Myclass a=new Myclass();   //关键点

System.out.println(a.i);

}

}

public class Test3 {

       public static void main(String[] args){

        Myclass g=new Myclass();

        g.output();

       }

}

 

运行结果;

 

静态字段/实例字段可以在声明时同时赋初值,也可以在静态/实例代码块中初始化,或者在构造方法中赋初值。

字段的初始化按位置顺序执行,故后续位置的字段的初始化,可以使用之前初始化的字段。但如果在字段初始化中使用后续的字段,则会产生编译错误。

常量字段只能被赋值一次,否则会产生编译错误。在创建第一个实例或引用任何静态成员之前,将自动调用静态初始化代码块,执行静态初始化;在创建第一个实例时,将自动调用实例初始化代码块,执行实例初始化。类的静态初始化在给定的程序中至多执行一次,对象的实例初始化则每次创建对象都要执行。

 

posted @ 2017-10-19 21:45  一笑任逍遥  阅读(115)  评论(0编辑  收藏  举报