• 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();

           }

    }

    运行结果;

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

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

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

     

  • 相关阅读:
    Java面试——从JVM角度比较equals和==的区别
    Java线程和多线程(三)——线程安全和同步
    玩转Android之MVVM开发模式实战,炫酷的DataBinding!
    写点什么好呢2? 钱、事业、婚姻、人生意义
    写点什么好呢2? 钱、事业、婚姻、人生意义
    大型网站架构技术一览
    【树莓派】GSM900模块
    【Latex】数学公式排版
    【MYSQL】导入中文后乱码问题
    【R】shiny界面
  • 原文地址:https://www.cnblogs.com/2016-zck/p/7695613.html
Copyright © 2020-2023  润新知