07.Java 类型转换、基本类型常见错误、Scanner获取键盘输入

自动类型转换

自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。

如图:

其中,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的丢失。

注意点:

整型常量可以直接赋值给 byte、short、char 等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。

代码示例:

// 测试类型自动转换
public class TestTypeConvert {
    public static void main(String[] args) {
        int a = 324;      // 编译正确
        long b = a;       // 编译正确,在表数范围内,int 类型可以直接转为 long 类型,在表数范围内
        double d = b;     // 编译正确,long 类型的 b 可以把 324 这个值传给 double 类型的 d。
        a = b;            // 报错,long 类型不能赋值给 int 类型
        long e = 3.23F;   // 报错,float 类型表数范围比 long 类型大
        // 特例
        byte b2 = 123;   // 123 在 byte 的表数范围之内
    }
}

强制类型转换

强制类型转换,又被称为造型,用于显式的转换一个数值的类型。
在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

语法格式

(type)var

运算符 “()” 中的 type 表示要转换的类型名称,如 int、double

代码示例:强制类型转换

// 强制类型转换
public class TestTypeConvert {
    public static void main(String[] args) {
        double x = 3.14;
        int nx = (int)x;   // 转换后的值为 3
        char y = 'a';
        int z = y + 1;     // 字符型数据遇到数字相加,会变成对应数字
        System.out.println(nx);      // 结果为 3
        System.out.println(z);       // 结果为 98
        System.out.println((char)z); // 结果为 b
    }
}

基本数据类型常见错误

注意点

  1. 强制类型转换去操作比较大的数时,需要留意是否溢出。
  2. 不要命名名称为 l 的变量,l 容易与 1 混淆。
  3. long 类型使用大写 L,别用小写。

代码示例

// 基本数据类型运算常见错误
public class TestTypeConvert {
    public static void main(String[] args) {
        int money = 1000000000; // 10亿
        int years = 20;
        // 返回的 total 是负数,因为超过了 int 的表数范围
        int total =  money * years;
        System.out.println("total="+total);   // total=-1474836480
        // 返回的 total 仍然是负数。默认是 int,因此会转成 int 值,再转成 long。
        long total1 = money * years;   // 先进行了运算,再进行赋值,所以赋值的数据是已经损坏的数据
        System.out.println("total1="+total1); // total1=-1474836480
        // 返回的 total2 正确:因为先将一个因子变成 long,整个表达式发生了提升,全部用 long 来计算。
        long total2 = money * ((long)years);   // 先进行 long 类型转换,再进行运算操作,运算操作后的结果就为 long 类型,不会损坏。
        System.out.println("total2="+total2); // total2=20000000000

        // 直接在运算操作数上进行 long 类型定义,防止数据丢失
        long total3 = 34L * years * 3223 * 545786;
        System.out.println("total3="+total3); // total3=1196166429040
    }
}

Scanner获取键盘输入

代码示例

// 测试 Scanner 获取键盘输入
import java.util.Scanner;  // Scanner 是系统默认之外的类,需要导入
public class TestScanner {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);  // new 一个 Scanner 类对象
        System.out.println("请输入名字:");
        String name = scanner.nextLine();  // 定义变量,通过 nextLine() 来获取上一步输入的一行数据
        System.out.println("请输入你的爱好:");
        String like = scanner.nextLine();  // 定义变量,通过 nextLine() 来获取上一步输入的一行数据
        System.out.println("请输入年龄:");  // 输入年龄为整数,则使用 nextInt() 去接收数据
        int age = scanner.nextInt();       // 使用 nextInt() 去接收整型数据
        // 输出变量结果
        System.out.println("输出最终结果:######");
        System.out.println(name);
        System.out.println(like);
        System.out.println(age);
        System.out.println("来到地球的天数:"+age * 365);
        System.out.println("剩余待在地球的天数:"+(85 - age) * 365);
    }
}

输出结果

兄弟们,加油学习呀!学无止境,抓紧努力。

posted @ 2021-10-14 16:57  阿jun  阅读(141)  评论(0)    收藏  举报