zoukankan      html  css  js  c++  java
  • 1.31号Java复习题目——Java的基本数据类型和包装类(面试题刷题)

    1. 以下 Integer 代码输出的结果是?

    Integer age = 10;
    Integer age2 = 10;
    Integer age3 = 133;
    Integer age4 = 133;
    System.out.println((age == age2) + "," + (age3 == age4));

    答:true,false

    2. 以下 Double 代码输出的结果是?

    Double num = 10d;
    Double num2 = 10d;
    Double num3 = 133d;
    Double num4 = 133d;
    System.out.println((num == num2) + "," + (num3 == num4));

    答:false,false

    3. 以下程序输出结果是?

    int i = 100;
    Integer j = new Integer(100);
    System.out.println(i == j);
    System.out.println(j.equals(i));

    答:true,true

    题目分析:有人认为这和 Integer 高速缓存有关系,但你发现把值改为 10000 结果也是 true,true这是因为 Integer 和 int 比较时,会自动拆箱为 int 相当于两个 int 比较,值一定是 true,true

    4. 以下程序执行的结果是?

    final int iMax = Integer.MAX_VALUE;
    System.out.println(iMax + 1);

    答:-2147483648(--Integer.MAX_VALUE

    题目解析:这是因为整数在内存中使用的是补码的形式表示,最高位是符号位 0 表示正数,1 表示负数,当执行 +1 时,最高位就变成了 1,结果就成了 -2147483648。

    5. 以下程序执行的结果是?

    Set<Short> set = new HashSet<>();
    for (short i = 0; i < 5; i++) {
        set.add(i);
        set.remove(i - 1);
    }
    System.out.println(set.size());

    答:5

    题目解析:Short 类型 -1 之后转换成了 Int 类型,remove() 的时候在集合中找不到 Int 类型的数据,所以就没有删除任何元素,执行的结果就是 5。

    6. short s=2;s=s+1; 会报错吗?short s=2;s+=1; 会报错吗?

    答:s=s+1 会报错,s+=1 不会报错,因为 s=s+1 会导致 short 类型升级为 int 类型,所以会报错,而 s+=1 还是原来的 short 类型,所以不会报错。

    7. float f=3.4; 会报错吗?为什么?

    答:会报错,因为值 3.4 是 double 类型,float 类型级别小于 double 类型,所以会报错。如下图所示:

    报错示例图

    8. 为什么需要包装类?

    答:需要包装类的原因有两个。

    ① Java 的设计思想是万物既对象,包装类体现了面向对象的设计理念;
    ② 包装类包含了很多属性和方法,比基本数据类型功能多,比如提供的获取哈希值(hashCode)或获取类(getClass)的方法等。

    9. 基本类 int 和包装类 Integer,在 -128~127 之间都会复用已有的缓存对象,这种说法正确吗?

    答:不正确,只有包装类高频区域数据才有缓存。

    10. 包装类 Double 和 Integer 一样都有高频区域数据缓存,这种说法正确吗?

    答:不正确,基本数据类型的包装类只有 Double 和 Float 没有高频区域的缓存。

    11. 包装类的值比较要使用什么方法?

    答:包装类因为有高频区域数据缓存,所以推荐使用 equals() 方法进行值比较。

    12. 包装类有哪些功能?

    答:包装类提供的功能有以下几个。详见正文“包装类型”部分内容。

    • 功能丰富:包装类包含了有 hashCode、getClass 、max、min 等方法;
    • 可定义泛型类型参数:例如 List<Integer> list = new ArrayList<>(); ;
    • 序列化:包装类实现了 Serializable 接口,所以包装类天然支持序列化和反序列化;
    • 类型转换:包装类提供了方便的类型转换方法,比如 Integer 的 parseInt() 方法;
    • 高频区域数据缓存:高频区域可使用已有的缓存对象。

    13. 泛型可以为基本类型吗?为什么?

    答:泛型不能使用基本数据类型。泛型在 JVM(Java虚拟机)编译的时候会类型檫除,比如代码 List<Integer> list 在 JVM 编译的时候会转换为 List list ,因为泛型是在 JDK 5 时提供的,而 JVM 的类型檫除是为了兼容以前代码的一个折中方案,类型檫除之后就变成了 Object,而 Object 不能存储基本数据类型,但可以使用基本数据类型对应的包装类,所以像 List<int> list 这样的代码是不被允许的,编译器阶段会检查报错,而 List<Integer> list 是被允许的。

    14. 选择包装类还是基本类的原则有哪些?

    答:我们知道正确的使用包装类,可以提高程序的执行效率,可以使用已有的缓存,一般情况下选择基本数据类型还是包装类原则有以下几个。

    ① 所有 POJO 类属性必须使用包装类;
    ② RPC 方法返回值和参数必须使用包装类;
    ③ 所有局部变量推荐使用基本数据类型。

    15. 基本数据类型在 JVM 中一定存储在栈中吗?为什么?

    答:基本数据类型不一定存储在栈中,因为基本类型的存储位置取决于声明的作用域,来看具体的解释。

    • 当基本数据类型为局部变量的时候,比如在方法中声明的变量,则存放在方法栈中的,当方法结束系统会释放方法栈,在该方法中的变量也会随着栈的销毁而结束,这也是局部变量只能在方法中使用的原因;
    • 当基本数据类型为全局变量的时候,比如类中的声明的变量,则存储在堆上,因为全局变量不会随着某个方法的执行结束而销毁。

    16. 以下程序执行的结果是?

    Integer i1 = new Integer(10);
    Integer i2 = new Integer(10);
    Integer i3 = Integer.valueOf(10);
    Integer i4 = Integer.valueOf(10);
    System.out.println(i1 == i2);
    System.out.println(i2 == i3);
    System.out.println(i3 == i4);

    答:false,false,true

    题目解析:new Integer(10) 每次都会创建一个新对象,Integer.valueOf(10) 则会使用缓存池中的对象。

    17. 3*0.1==0.3 返回值是多少?

    答:返回值为:false。

    题目解析:因为有些浮点数不能完全精确的表示出来,举个栗子:

    System.out.println(3 * 0.1);

    返回的结果是:0.30000000000000004。

  • 相关阅读:
    code1002 搭桥
    FastJSON的使用方法
    关于最近一些问题和知识点的回顾的随笔
    Spring不能给sessionFactory注入值的问题,以及org.hibernate.HibernateException: createQuery is not valid without active transaction异常
    Struts2+Spring3+Hibernate4中,数据源应配置在Spring下,否则有异常:Cannot unwrap to requested type [javax.sql.DataSource]
    SSH2框架ClassNotFoundException:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter的问题
    nextLine()紧跟在nextXXX()后面读取不到数据的问题,以及两者的小结
    Android设置控件的透明度
    Android的布局文件遇到Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V问题
    《数学之美》读书笔记
  • 原文地址:https://www.cnblogs.com/LeoLRH/p/12244000.html
Copyright © 2011-2022 走看看