3. Java 基本数据类型

Java 是一种 强类型 语言,要求变量的使用严格规定,所有变量的使用都必须先定义

3.1 基本类型(8)

基本类型分为:数值类型:整型、浮点型、字符型;布尔型

  • 整型
    1. byte (1个字节)
    2. short (2个字节)
    3. int (4个字节)
    4. long (8个字节)
  • 浮点型
    1. float (4个字节)
    2. double (8个字节)
  • 字符型
    1. char (2个字节)
  • 布尔型
    1. boolean:true/false (1位)

基本类型的包装类:

Byte、Short、Integer、Long、Float、Double、Character、Boolean

3.2 引用类型

  • 接口
  • 数组

3.3 常见面试题

3.3.1 自动拆箱和装箱

装箱:将基本数据类型转换为对应的引用类型;调用 valueOf() 方法

拆箱:将引用类型转换为对应的基本数据类型;调用 xxxValue() 方法

相关博文:https://www.cnblogs.com/dolphin0520/p/3780005.html

例子:

Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;

System.out.println(i1 == i2);// true
System.out.println(i3 == i4);// false

解析:
    Integer.valueOf(); 方法 会根据数值判断,[-128,127] 之间会查找相同值得引用地址,否则new 一个新的对象
    
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
=========================================================================================================

Double d1 = 100.0;
Double d2 = 100.0;
Double d3 = 200.0;
Double d4 = 200.0;


System.out.println(d1 == d2);// false
System.out.println(d3 == d4);// false

解析:
    double.valueOf  是直接创建新对象
    
    public static Double valueOf(double d) {
        return new Double(d);
    }    

=========================================================================================================
布尔值:定义了两个静态变量;此会在初始化加载的时候就加载完。
    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);

    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }

因此:

整数型 Byte、Short、Integer、Long、Character 、Boolean都是同类模式;常量池技术

  • Byte、Short、Integer、Long 缓存数据:[-128, 127]
  • Character : [0, 127]
  • Boolean : [True Flase]
  • ==》 以上超出对应的范围即会创建新的对象。

浮点型 Double 、Float 直接new.

  • 因为浮点数没有固定范围大小的数值

Integer i = new Integer(***); 和 Integer i = *; 的区别

  1. 第一种不会触发自动装箱;第二种会
  2. 某种程度上来说,第二种的执行效率要高于第一种;
    • 因为自动装箱的时候:会判断区间值,如在区间种则无需new.

进制

  • 整数进制首位

    1. 二进制:0b
    2. 八进制:0
    3. 十进制:
    4. 十六进制:0x
  • 浮点数

    1. float:有限、离散、舍入、大约、接近但不等于
    2. 最好完全不要使用浮点数进行比较
    3. 银行业务、金钱业务:使用 BigDecimal 数学工具类
  • 字符型

    1. 所有的字符本身还是数字
  • 转义字符

    1. 制表符
    2. 换行
    3. ...
  • 布尔型

    1. if(flag==true){} 与 if(flag) 是一样的

3.4 类型转换

  • 强制转换:(类型)变量名 ; 由高到低

    int i = 10;
    byte a = (byte) i;
    
  • 自行转换:由低到高

  • 运算过程中不同类型的数据需转换为同一类型

  • 注意事项:

    1. 不能对布尔类型进行转换
    2. 高容量转换为低容量时需强制转换
    3. 强制转换存在内存溢出的问题
    4. 不能把对象类型转换为不相干的类型
原文地址:https://www.cnblogs.com/blackBlog/p/13451183.html