Java的基本数据类型

147 阅读6分钟

基本数据类型包含:

  • 数值型:

    整数类型: byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)

    浮点型: float(4个字节)、double(8个字节)

  • 字符型: char(2个字节)

  • 布尔型: boolean(1个字节或者4个字节)

整形

类型占用存储空间表数范围
byte1字节-2^7 ~ 2^7 - 1
short2字节-2^15 ~ 2^15 -1, 65536
int4字节-2^31 ~ 2^31 - 1 约21亿
long8字节-2^63 ~ 2^63 - 1

Java语言整形常量的四种表示形式

  • 十进制整数, 如 99, -500, 0
  • 八进制整数, 要求 以0开头,如:015
  • 十六进制数,要求0x 或者 0X开头,如Ox15
  • 二进制数,要求0b 或者 OB开头,如:0b01110011
public class TestInt {
  public static void main(String[] args) {
    int a = 100; // 十进制
    int b = 015; // 八进制
    int c = 0xff; // 十六进制
    int d = 0b1001010101; // 二进制
    byte e = 50;
    short f = 300;

    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    System.out.println(d);
    System.out.println(e);
    System.out.println(f);

    int salary = 30000; // 整型常量默认类型是int
    // int yearSalary = 3000000000; // 这是错误的,int最大可表示21亿。则需要把整形常量定义为long类型
    long yearSalary = 30000000000000L; // 把整数常量定位为long类型
    System.out.println(yearSalary);
  }
}

浮点型(Floating Point Number)

类型占用储存空间表数范围
float4字节-3.043E38 ~ 3.043E38
double8字节-1.798E308 ~ 1.798E308
  1. float 类型又称为单精度类型,尾数可以精确为7位有效数字

  2. double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型

  3. Java浮点类型常量有两种表现形式 (1)十进制数形式: 例:3.14 314.0 0.314 (2)科学技术法形式:例:3.14e0 3.14E2

  4. 浮点数不精确,不要用于比较

    浮点数存在舍入误差,数字不能精确表示。浮点数适合普通的科学和工程计算,精度足够,但不适合精度要求非常高的商业计算,这时候要使用BigDecimal进行运算和比较。

  5. 浮点常量默认类型是double, 要改成float可以后面加F或者f

public class TestFloatNumber {
  public static void main(String[] args) {
    double d1 = 3.14;
    double d2 = 3.14E2; // 科学计数法
    // float d3 = 1.65; // 错误写法,浮点常量默认类型是double, 改float需要后面加F
    float d3 = 1.65F;
    System.out.println(d1);
    System.out.println(d2);
    System.out.println(d3);

    float f1 = 0.1F;
    double d4 = 1.0/10;
    System.out.println(f1 == d4); // false, 两个等号是比较, 尽量不要比较, 并不相等;
  }
}

字符型

字符型的发展历史:

image.png

ASCII字符集表示了英文字母、数字、特殊字符、控制符,所有字符集的老祖宗。大家都会兼容它。用一个字节来表示一个字符,一个字节是2^8位,对应的值是256,则最多可以表示256个状态

如下图:目前只用到了128个,后面的128个一直是空的。对于26个英文字母够用。

ASCII字符集的表述,26个英文字母完全够用

但对于其他文字就不够用了,于是有了ISO8859-1,包含了256个字符。前128个字符与ASCII中完全相同。后128个包含了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。

随着我国计算机发展,汉字处理有了我们的方案,就是GB2312,两个字节表示一个汉字。两个字节可以表示65536个状态,汉字再多也能全部包含了。后来有了GBK、GB18030(56个民族语言)。

台湾地区也搞了一套显示繁体中文的大五码BIG5。

全世界各个地方,都有自己的文字编码。由于不互通,经常造成乱码问题。如果有一种统一的字符集,将世界上所有语言字符都纳入其中,每一个字符都给与一个全球独一无二的编码,那么乱码问题就会消失。于是全球所有国家和民族使用的所有语言字符的同一字符集诞生了,就是Unicode字符集。

Uicode字符集是为了给全世界所有字符一个唯一的编码。唯一对应英文Unique,而编码英文是code。

Unicode采用了字符集和编码分开的策略。Unicode之前,Unicode诞生之前可以将字符集和字符编码混为一谈,而在Unicode中必须严格区分开。

Uicode字符集统一采用两个字节表示一个字符,包含英文字母。但是,由于英文占用互联网信息绝大部分。真实存储和传输时,会造成极大的浪费;因此,目前主要采用UTF-8编码来实现具体的存储和传输。UTF-8是编长编码,用1-6个字符编码Unicode字符。西欧字符仍然是一个字节,汉字3个字节。

字符型在内存中占用2个字节在JAVA中使用单引号来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串

char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占用2个字节,可允许有65536个字符。

public class TestChar {
  public static void main(String[] args) {
    char c1 = 'a';
    char c2 = '中';
    char c3 = '\u0061';
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c3);

    // java 中字符串不是基本数据类型,而是一个类
    String str = "我是中国人";
    System.out.println(str);

    // 转义字符
    char c5 = '\n';
    System.out.println("a\nb\nc\nd\ne\nf\ng");
  }
}

Unicode 具有从0到65535之间的编码,他们通常从‘\u00000’到‘\uFFFF’之间的十六进制来表示(前缀为u表示Unicode)

char c = '\u0061';

转义字符

char c = '\n'

image.png

注意:String类,其实是字符序列,本质是char字符组成的数组。

布尔型(boolean)

  1. boolean 类型有两个常量值, true 和 false。

  2. 在内存中占一个字节或者四个字节,不可以使用0 或者 非0的整数替代true 和 false,这点和C语言不同。

public class TestBoolean {
  public static void main(String[] args) {
    boolean b1 = true;
    boolean b2 = false;

    if (b1) {
      System.out.println("b1是true");
    } else {
      System.out.println("b1是false");
    }
  }
}