Java基础 第一节 第七课

举报
我是小白呀iamarookie 发表于 2021/09/11 00:22:47 2021/09/11
【摘要】 数据类型转换 自动转换转换原理图解转换规则 强制转换转换格式转换原理图解强烈注意 ASCII 编码表 Java 程序中要求参与的计算的数据, 必须要保证数据类型的一致性. 如果数据类型...


自动转换

一个 int 类型和一个 byte 类型变量进行加法运算, 结果会是什么数据类型?

int i = 1;
byte b = 2;

  
 
  • 1
  • 2

运算结果, 变量的类型将是 int 类型, 这就是出现了数据类型的自动类型转换现象.

自动转换: 将 取值范围小的类型自动提升为取值范围大的类型.

public static void main(String[] args) {
        int i = 1;
        byte b = 2;
        // byte x = b + i; // 报错
        // int 类型和 byte 类型运算, 结果是 int 类型
        int j = b + i;
        System.out.println(j);
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

转换原理图解

byte 类型内存占有 1 个字节, 在和 int 类型运算时会提升为 int 类型. 自动补充 3 个字节, 因此计算后的结果还是 int 类型.
在这里插入图片描述
同样道理, 当一个 int 类型变量和一个 double 变量运算时, int 类型会自动提升为 double 类型运算.

public static void main(String[] args) {
        int i = 1;
        double d = 2.5;
        // int类型和double类型运算, 结果是double类型
        // int类型会提升为double类型
        double e = d + i;
        System.out.println(e);
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

转换规则

范围小的类型向范围大的类型提升, byte, short, char 运算时直接提升为 int.

byte, short, char‐‐>int‐‐>long‐‐>float‐‐>double

  
 
  • 1

强制转换

将 1.5 赋值到 int 类型会发生什么?
产生编译失败, 肯定无法赋值.
在这里插入图片描述
double 类型内存 8 个字节, int 类型内存 4 个字节. 1.5 是 double 类型, 取值范围大于 int. 可以理解为 double 是 8 升水壶, int 是 4 升的水壶. 不能把大水壶的水直接放进小水壶去.

想要赋值成功, 只有通过强制类型转换, 将 double 类型强制转换成 int 类型才能赋值.

强制类型转换: 将取值范围大的类型强制转换成取值范围小的类型.

比较而言, 自动转换是 Java 自动执行的, 而强制转换需要我们自己动手执行.

转换格式

数据类型 变量名 = ( 数据类型 ) 被转数据值;
将 1.5 赋值到 int 类型, 代码为:

// double类型数据强制转成int类型, 直接去掉小数点
int a = (int) 1.5;

  
 
  • 1
  • 2

同样道理, 当一个 short 类型与 1 相加, 我们知道会类型提升, 但是还想给结果赋值给 short 类型变量, 就需要强制转换.

public static void main(String[] args) {
    //short类型变量,内存中2个字节
    short s = 1;
    /*
      出现编译失败
      s和1做运算的时候,1是int类型,s会被提升为int类型
      s+1后的结果是int类型,将结果在赋值会short类型时发生错误
      short内存2个字节,int类型4个字节
      必须将int强制转成short才能完成赋值
    */
    s = s + 1;//编译失败
    s = (short)(s+1);//编译成功
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

转换原理图解

在这里插入图片描述

强烈注意

浮点转成整数, 直接取消小数点, 可能造成数据损失精度.
int 强制转成 short 砍掉 2 个字节, 可能造成数据丢失.
在这里插入图片描述

// 定义s为short范围内最大值
short s = 32767;
// 运算后,强制转换,砍掉2个字节后会出现不确定的结果
s = (short)(s + 10);

  
 
  • 1
  • 2
  • 3
  • 4

执行结果:
在这里插入图片描述

ASCII 编码表

public static void main(String[] args) {
        // 字符类型变量
        char c = 'a';
        int i = 1;
        // 字符类型和int类型计算
        System.out.println(c + i); // 输出结果是 98
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在计算机的内部都是二进制的 0, 1 数据, 如何让计算机可以直接识别人类文字的问题呢? 就产生出了编码表的概念.

编码表: 就是将人类的文字和一个十进制数进行对应起来组成一张表格.
在这里插入图片描述

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/109884931

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。