Java基础之强制类型转换

显式类型转换

赋值过程中,大类型数据赋值给小类型变量,编译会报错,此时必须通过强制类型转换实现。

固定格式

数据类型 变量名 = (目标数据类型)(数值或变量或表达式);

案例展示:

java 复制代码
package com.briup.chap02;

public class Test082_ExplicitTrans {
    public static void main(String[] args) {
        // 1.数据赋值 强制类型转换
        float f1 = (float)3.14;
        System.out.println(f1);		//3.14

        // 1.数据赋值 强制类型转换
        int size = (int)123L;
        System.out.println(size);	//123

        double len = 178.5;
        // 2.变量赋值 强制类型转换
        int length = (int)len;
        System.out.println(length);	//178

        byte b = 10;
        short s = 5;
        double d = 2.3;
        // 3.表达式赋值 强制类型转换
        float f2 = (float)((b - 5) * s + d);
        System.out.println(f2);		//27.3
    }
}

特殊情况

观察下面代码,思考为什么编译能够成功

java 复制代码
package com.briup.chap02;

public class Test083_SpecialTrans {
    public static void main(String[] args) {
        // 为什么 int -> byte 成功了?
        byte b = 10;
        System.out.println(b);

        // 为什么 int -> short 成功了?
        short s = 20;
        System.out.println(s);

        // 为什么 int -> char 成功了?
        char c = 97;
        System.out.println(c);

        // 为什么 b2赋值成功,b3却失败了?
        byte b2 = 127;
        System.out.println(b2);
        //byte b3 = 128;
        //System.out.println(b3);

        // 为什么 s2赋值成功,s3却失败了?
        short s2 = -32768;
        System.out.println(s2);
        //short s3 = -32769;
        //System.out.println(s3);

        // 为什么 c2赋值成功,c3却失败了?
        char c2 = 65535;
        System.out.println("c2: " + c2);
        //char c3 = 65536;
        //System.out.println(c3);
    }
}

整形常量优化机制

​ 使用整形字面值常量(默认int类型)赋值给其他类型(byte、char、short)变量时,系统会先判断该字面值是否超出赋值类型的取值范围,如果没有超过范围则赋值成功,如果超出则赋值失败。

java 复制代码
public static void main(String[] args) {
    // 为什么 int -> byte 成功了?
    // 字面值常量10,在赋值给b的时候,常量优化机制会起作用:
    //	系统会先判断10是否超出byte的取值范围,如果没有,则赋值成功,如果超出(比如128),则赋值失败
    byte b = 10;
    System.out.println(b);

    // 为什么 int -> short 成功了?
    //	系统会先判断20是否超出short的取值范围,结果是没有,则赋值成功
    short s = 20;
    System.out.println(s);

    //	如果使用-32769赋值,超出short类型取值范围,则赋值失败
    //short s3 = -32769;
    //System.out.println(s3);
}

注意事项:

  • 常量优化机制只适用于常量,如果是变量,则不可以
  • 该优化机制只针对int类型常量,对于long、float、double等常量,则不可以

案例展示:

java 复制代码
public static void main(String[] args) {
   	// 下面3个赋值语句都 编译失败
    byte b = 10L;
    short s = 3.14F;
    int n = 2.3;

    // 下面2个赋值语句 ok
    byte b1 = 2;
    short s2 = 3;

    // 变量赋值或表达式赋值,都编译失败
    byte b3 = s2;
    byte b4 = b1 + s2;
}
相关推荐
nanxun88621 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程