(五) Java变量与数据类型

佚名 / 2023-04-28 / 原文

目录
  • Java变量
  • Java 数据类型
    • 基本数据类型
      • 整数类型
      • 浮点(小数)类型
      • 字符型
    • 整型细节
    • 浮点数细节
    • 字符型细节
    • 布尔类型: boolean
    • 引用类型
  • 强制类型转换
  • ++i和i++的区别

Java变量

  • 需要先声明,再赋值
    int a;
    int b=10;
    

Java 数据类型

  • Java数据类型分为两大类:基本数据类型, 引用类型
基本数据类型
  • 基本数据类型有8种, 其中6种数值型[byte, short, int, long, float, double ], char, boolean
整数类型
  1. byte[1个字节], 存放一个数, 范围-128~127
  2. short[2个字节], -(\(2^{15}\)~\(2^{15}-1\)), -32768~32767
  3. int[4个字节],-(\(2^{31}\)~\(2^{31}-1\))
  4. long[8个字节], -(\(2^{63}\)~\(2^{63}-1\))
浮点(小数)类型
  1. float[4个字节]
  2. double[8个字节]
字符型
  1. char[2个字节], 存放单个字符 'a', 汉字'李', 汉字是两个字节,字母一个
  2. boolean[1个字节], 存放 true, false
整型细节
  1. Java程序中变量常声明为int型, 默认也是int, 比如一个9,默认为int
    long = 1l;  // 使用long必须加上l或L
    
  2. bit: 计算机中的最小存储单位. byte: 计算机中基本存储单元, 1 byte = 8 bit
浮点数细节
  1. Java的浮点型常量默认为double型, 声明float型常量, 须后加 fF

    float num = 1.1;  // 这是错误的, 因为默认是double类型
    double n2 = 1.2f; // 这个也是可以的
    
  2. 科学技术法形式
    5.12e2[\(5.12\times10^2\)], 5.12E-2[\(5.12/10^2\)]

  3. 除法的精度问题

    double num1 = 2.7;
    double num2 = 8.1/3;
    // 实际上第二个是输出2.69999999之类, 因为计算机默认8.1后面还有小数位,尽量不要用运算后的小数进行大小判断
    if (Math.abs(num1-num2)){
    // 可以用两个数的差值在某个范围来计算相等
    }
    
字符型细节
  1. 字符底层也是Unicode码

    char c1 = 'a';
    char c2 = 97;
    char c = 26446;  # 对应的是李, 这是李的Unicode码
    System.out.println((int)c1);
    System.out.println('a'+10); # 先把'a'转成Unicode码, 然后再加10
    // 两者是相等的
    
  2. 单引号''代表的是字符, 双引号""代表的是字符串String, 注意不要用错了

  3. 字符和码值的对应关系

    • ACSll编码表, 一个字节表示, 有128个字符, 实际上一个字节可以表示256个字符, 只用了128个
    • Unicode编码表, 使用2个字节来表示字符, 字母和汉字统一都是占用2个字节, 能表达\(2^{16}\) 个符号
    • utf-8编码表(可以认为是Unicode的一个改进, 是互联网上使用最广的编码), 大小可变的编码, 字母使用1个字节, 汉字3个字节
    • gbk, 可以表示汉字, 字母使用1个字节, 汉字2个字节, 说明gbk表示的汉字没有utf-8表示的汉字多
布尔类型: boolean
  1. boolean类型只允许true或false, 无null
  2. boolean类型占一个字节
  3. 不能用0或者非0的整数代替false和true, 这点和c语言不同
    boolean pass = true;
    
引用类型

强制类型转换

  • 自动类型转换的逆过程, 讲容量大的数据类型转换为容量小的数据类型. 使用时要加上强制转换符()

    int i = (int)1.9; // 输出1 
    
  • 基本数据类型和String类型的转换

    int n1 = 100;
    float n2 = 4.5f;
    String s1 = n1 + "";
    String s2 = n2 + "";  # 自动转为字符串类型了
    
    • 基本数据类型转String只需+""即可
    • String类型转基本数据类型, 通过基本类型的包装类调用parseXX方法即可, Java里每个基本类型都对应一个包装类
    String s5 = "100";
    int num1 = Interger.parseInt(s5);
    

++i和i++的区别

  • 前++: ++i先自增再赋值
  • 后++: i++先赋值后自增
int j = 8;
int k= ++j; //等价于j=j+1;k=j;
int k= j++; //等价于k=j;j=j+1;