跳转至

变量

数据类型

  • 基本数据类型(8种)

    • 整数类型:byte[1字节], short[2字节], int[4字节], long[8字节]
    • 浮点类型:float[4字节], double[8字节]
    • 字符(串)类型:char, string
    • 布尔类型:boolean
  • 引用数据类型

    • 类(class
    • 接口(interface
    • 数组([]
  • "变量在同一作用域内不能重名"

整数类型

  • Java各整数类型有固定的范围和字段长度, 不受具体OS的影响, 以保证java程序的可移植性。
  • Java的整型常量默认为 int 型, 声明long型常量须后加 'l''L'
  • bit: 计算机中的最小存储单位。byte: 计算机中基本存储单元, 1 byte = 8 bit

浮点类型

  • 与整数类型类似, Java 浮点类型也有固定的范围和字段长度, 不受具体OS的影响。 [float 4个字节 double 是 8个字节]
  • Java 的浮点型常量默认为double型, 声明float型常量, 须后加 ‘f’ 或 ‘F’
  • 浮点型常量有两种表示形式

    • 十进制数形式: 如: 5.12 512.0f .512 (必须有小数点)

    • 科学计数法形式:如: 5.12e2(结果仍是double,故输出512.0) 5.12E-2

  • 通常情况下, 应该使用double型, 因为它比float型更精确。

    • double num9 = 2.1234567851;

    • float num10 = 2.1234567851F;

  • 浮点数使用陷阱: 2.78.1 / 3 比较,后者是无限接近于2.7的小数(2.69999……)

字符类型

  • 字符常量是用单引号(' ')括起来的单个字符。例如:

    char c1 = 'a'; char c2 = '中'; char c3 = '9';
    
  • Java中还允许使用转义字符 \ 来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n'; //'\n'表示换行符

  • 在java中, char的本质是一个整数, 在输出时, 是unicode码对应的字符。

    http://tool.chinaz.com/Tools/Unicode.aspx

  • 可以直接给char赋一个整数, 然后输出时, 会按照对应的unicode 字符输出 [97]

  • char类型是可以进行运算的, 相当于一个整数, 因为它都对应有Unicode码。

+号 的使用

  • 左右两边都是数值型时,做加法运算
  • 有一方 是字符串,做拼接运算
  • 运算顺序从左到右
System.out.println(100 + 3 + "hello"); // 103hello
System.uot.println("hello" + 100 + 3); // hello1003

自动类型转换

graph LR;
    byte --> short --> int --> long --> float --> double;
    char --> int;
  1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。

    //float d1 = n1 + 1.1;//错误 n1 + 1.1 => 结果类型是 double
    //double d1 = n1 + 1.1;//对 n1 + 1.1 => 结果类型是 double
    float d1 = n1 + 1.1f;//对 n1 + 1.1 => 结果类型是 float
    
  2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时会报错,反之就会进行自动类型转换。

    int x = 1.1; // 错误
    
  3. (byte, short) 和 char 之间不会相互自动转换。

  4. byte, short, char 他们三者可以计算,在计算时首先提升为 int 类型。

    byte b = 10;
    // char c = b; // 编译错误
    
  5. boolean 不参与转换。

  6. 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型。

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,格外要注意。

  1. 当进行数据的大小从 大 —> 小,就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

    //int x = (int)10*3.5+6*1.5;
    int y = (int)(10*3.5+6*1.5);
    System.out.println(y);
    
  3. char类型可以保存 int 的常量值,但不能保存int的变量值,需要强转

    char c1 = 100;
    int m = 100;
    char c2 = m; // 编译器在编译时无法确定变量 `m` 的值,只知道它的类型是 `int`,认为从 `int` 到 `char` 的转换有风险。
    char c3 = (char)m;
    System.out.println(c2);
    
  4. byte和short类型在进行运算时,当做int类型处理。

String

1.基本类型 -> String 类型

  • 语法:将基本类型的值与一个空字符串 "" 相连接即可。
  • 示例

    int n1 = 100;
    float n2 = 1.1f;
    double n3 = 3.4;
    boolean b1 = true;
    
    String str1 = n1 + "";
    String str2 = n2 + "";
    String str3 = n3 + "";
    String str4 = b1 + "";
    

2.String 类型 -> 基本数据类型

  • 语法:通过基本类型的包装类调用相应的 parseXX 方法即可。
  • 示例

    int num1 = Integer.parseInt("123");
    double num2 = Double.parseDouble("123.1");
    float num3 = Float.parseFloat("123.45");
    short num4 = Short.parseShort("12");
    long num5 = Long.parseLong("12345");
    boolean b = Boolean.parseBoolean("true");
    byte num6 = Byte.parseByte("12");
    

3.String 类型 -> char类型

String word = "Hello";
char firstLetter = word.charAt(0); // 获取第一个字符
char lastLetter = word.charAt(4);  // 获取第五个字符

System.out.println("第一个字母是: " + firstLetter); // 输出 'H'
System.out.println("第五个字母是: " + lastLetter);  // 输出 'o'