面试准备之JavaSE复习(一)

目录

1.JRE、JDK和JVM的关系

2.JAVA语言的特点

3.JAVA和C++的区别

4.JAVA的数据类型

5.自动装箱与拆箱

1.JRE、JDK和JVM的关系

JDK(java development kit):Java开发工具包,是整个java的核心,包括JRE,JAVA工具和Java基础类库

JRE(java runtime envirment):Java运行环境,包括JVM及Java核心类库

JVM(java virtual machine):Java虚拟机,是整个Java实现跨平台的核心

总结 JDK是java的开发工具,JRE是java的运行环境,JVM是java虚拟机

        JDK包含JRE,JRE包含JVM

2.JAVA语言的特点

        开源,简单,高效

        面向对象

        平台无关性,通过JVM实现,一次编译,到处运行

        支持网络编程

        多线程

        动态的内存管理机制

        安全性

3.JAVA和C++的区别

首先,JAVA和C++都是面向对象的语言,主要有以下区别

1.JAVA通过虚拟机实现跨平台特性,而C++依赖于特定的平台

2.JAVA没有指针,它的引用可以看作是安全指针,而C++有着和C一样的指针

3.JAVA支持自动垃圾回收,而C++需要手动回收

4.JAVA不支持多重继承,只能通过实现多个接口来实现该目的,而C++支持多继承

5.JAVA不支持操作符重载,而C++支持

6.JAVA的goto是保留字,不可使用,但C++可以

4.JAVA的数据类型

 整数类型

面试准备之JavaSE复习(一)_第1张图片

  Java语言的整型常量默认为int型,声明long型常量时后加‘ l ’或‘ L ’ 。

  浮点类型

面试准备之JavaSE复习(一)_第2张图片

  Java 浮点型常量默认为 double 型,声明一个常量为 float 型时在数字后面加’ f ‘ 或’ F ‘。

   布尔类型适于逻辑运算,一般用于程序流程控制 。JAVA中布尔型变量只能取值true和false,不可       以0或非 0 的整数替代false和true。

  字符类型

    char型数据表示单个字符,占2个字节,使用时字符需要用单引号括起来。其默认值为'\u0000'

5.自动装箱与拆箱

装箱:将基本数据类型用包装类型包装起来

拆箱:将包装器类型转换为基本类型

面试准备之JavaSE复习(一)_第3张图片

 输出结果为: true

                        false

下面解释一下原因:可以查看源码

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
//如果i满足条件,直接返回,否则创建一个新对象
        return new Integer(i);
    }

private static class IntegerCache {
        static final int low = -128;
//下限为-128
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
//上限为127
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }

个人理解为:在创建Integer对象时,如果数值范围在-128到127之间,则返回IntegerCache 已经存在的对象引用,否则创建一个新的对象

Integer,Short,Character,Long这几个类的valueOf()类似

再看Double类的源码

public static Double valueOf(double d) {
        return new Double(d);
    }

每次创建对象都是创建一个新的对象,Float同

面试准备之JavaSE复习(一)_第4张图片

 输出结果为: true

                        true

                        true

                        false

                        true

                        true

                        false

                        false

下面解释一下原因:

1.==号两边都是引用类型时,比较的是是否指向同一个对象,都是基本数据类型时,比较的是数值,一边是基本数据类型,一边是引用数据类型时,会触发自动拆箱,即比较数值

2.equals()方法会先触发自动拆箱,再触发自动装箱,即先比较数值,再比较是否指向同一个对象

3.integer3是一个对象,a是一个常量,二者存放内存的位置不同,所以不相等

你可能感兴趣的:(se复习,面试,职场和发展,java)