Java 数据类型的转换

介绍

一些场景中,需要将一种数据类型转为另一种数据类型,可能是自动进行了转换,包括:

  1. 赋值

    比如double d = 1; 提供的字面值(1, 为int)和变量的类型(double)不一样。

  2. 计算

    比如 3.14 + 2 , 两种不同数据类型进行运算。

  3. 函数参数

    比如 void foo(int i){}; foo('a'); , 实参和形参的类型不一样。

在这些场景中, 需要了解数据间转换的规则。

基本数据类型自动转换

范围小的数据类型可以转为大的数据类型,反过来不行。可以看下图:

在这里插入图片描述

箭头代表可以进行转换,虚线箭头说明转换后可能有精度损失。

赋值和函数传参

例子:

short s = 1;
int i = s;  // ok
// s = i;      // error
float f = i;

void foo(int i) {
   }

foo('a'); // char可以转为int
运算

算术运算的两个操作数a, b, 比如 a + b, 如果a, b的类型不一样,需要先转为一样的类型:

如果两个操作数中有一个是double, 另一个就会转为double

否则,如果一个是float, 另一个就会转为float

否则,如果一个是long, 另一个就会转为long

否则,两个数都转为int

例子:

byte b1 = 1;
byte b2 = 2;
// byte sum = b1 + b2; // error, b1 + b2的结果是int
int sum = b1 + b2;     // ok

double d = 1.0;
int i = 1;
// int sum = d + i; // error
double sum1 = d + i;

基本数据类型的强转

当需要将 大范围类型 转换为 小范围类型 时,必须使用强制类型转换,但是结果可能不是你预期的。

  • 大范围整数类型强转为小整数类型, 会截取补码二进制表示的低x位

    int i = 255;
    byte b = (byte) i;
    System.out.println(b); // output: -1
    
  • 浮点数转为整数会截取小数部分

    double d = 3.14;
    int i = (int) d;
    System.out.println(i); // output: 3
    
  • boolean 不能与其他类型转换

    boolean b = true;
    // int i = (int)b; // error
    

String 和基本数据类型间的转换

  • 基本数据类型转为String

    int num = 100;
    String str1 = String.valueOf(num);  // "100"
    String str2 = Integer.toString(num);  // "100"
    String str3 = "" + num;  // "100"
    
    String str4 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大勇学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值