Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

    • 计算机常识

    • Java语言概述

    • 基本语法

      • Java-关键字与保留字
      • Java-标识符(Identifier)
      • Java-变量
      • Java-基本数据类型-整型
      • Java-基本数据类型-浮点型
      • Java-基本数据类型-char字符
      • Java-基本数据类型-boolean布尔类型
      • Java-基本数据类型之间的运算规则
        • 前言
        • 自动类型提升
          • byte和int
          • int和long
          • float
          • char和short
          • char和byte
          • byte和short
          • 小结
        • 强制类型转换
          • 精度损失举例1
          • 没有精度损失
          • 精度损失举例2
      • 字符串类型 String
      • 进制
      • 运算符
      • Scanner类
      • 流程控制-分支结构
      • 流程控制-循环结构
    • 数组

    • 面向对象

    • 异常处理

  • Java核心基础

  • 设计模式

  • Web开发

  • SpringBoot

  • 微服务

  • Elasticsearch

  • 运维

  • 后端
  • Java入门基础
  • 基本语法
SaulJWu
2020-11-25

Java-基本数据类型之间的运算规则

# 前言

基本数据类型转换分为两种:

  • 自动类型提升
  • 强制类型转换

只是7种基本数据类型变量间的转换,不包含boolean类型。

# 自动类型提升

# byte和int

byte b1 = 2;
int i1 = 129;
int i2 = b1 + i1; // 131
1
2
3

当byte和int类型相加时,由于byte占用1个字节,int占用4个字节,当和int相加时,为了防止数据丢失,会自动转换为int类型。

# int和long

long l1 = b1 + i1;// 131
1

# float

float f = b1 + i1;//131.0
1

# char和short

short s1 = 10;
char c1 = 'a';

short s2 = s1 + c1;//报错
char c2 =  s1 + c1;//报错

int res = s1 + c1;//107
1
2
3
4
5
6
7

short和char运算会自动提升为int类型

# char和byte

char c1 = 'a';
byte b2 = 10;

char c3 = c1 + b2;//报错
byte b3 = c1 + b2;//报错

int res = c1 + b2;//107
1
2
3
4
5
6
7

char和byte运算会自动提升为int类型

# byte和short

byte b3 = 3;
short s3 = 10;
byte b4 = b3 + s3;//报错
short s4 = b3 + s3;//报错
int res = b3 + s3;//13
1
2
3
4
5

byte和short运算自动提升为int类型

# 小结

容量小的数据类型变量和容量大的数据类型变量运算时,会自动提升为容量大的数据类型。

  • 容量大小指的是,数据类型的范围
  • 赋值(=)也是运算。
  • byte、char、short三种类型的运算就提升为int类型,因为java在做运算的时候,如果操作数均在int范围内,那么一律在int的空间内运算。
  • 容量大小:byte、char、short >> int >> long >> float >> double

# 强制类型转换

什么叫强制类型转换?

自动类型提升运算的逆运算。

自动类型提升是把小容量的数据类型自动提升为大容量的数据类型,而强制类型转换则相反,是把大的数据类型转换为小的数据类型。

  • 强制类型转换需要强转符:(),一对小括号
  • 注意点:强制类型转换,可能导致精度损失。

# 精度损失举例1

double d1 = 12.3;
int i1 = (int)d1; // 12,截断操作。
1
2

# 没有精度损失

long l1 = 123;
short s2 = (short)l1;//123
1
2

long是8个字节,而short是2个字节,当long强转为short时,long砍掉6个字节,如果这6个字节本来是0的话,那就没有精度损失。

# 精度损失举例2

int i2 = 128;
byte b = (byte)i2;// -128
1
2

这里其实需要二进制层面去解释,后面再来填坑,但可以确定的是,这个案例也算是精度损失。

帮我改善此页面 (opens new window)
#Java#数据类型转换
上次更新: 2020/12/18, 12:50:58
Java-基本数据类型-boolean布尔类型
字符串类型 String

← Java-基本数据类型-boolean布尔类型 字符串类型 String→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式