Java基本数据的类型转换

本文详细介绍了Java中的基本数据类型(整型、浮点型、char和布尔类型),包括它们的存储需求、取值范围以及Java中自动类型转换和强制类型转换的概念,特别强调了类型转换可能带来的溢出问题和自动类型提升规则。
摘要由CSDN通过智能技术生成

1.基本数据类型

  1.1 整型

类型存储需求bit数取值范围备注
int4字节4*8

-2,147,483,648 ~ 2,147,483,647

有符号整数类型
short2字节2*8-32,768  ~  32,767有符号整数类型
long8字节8*8

-9,223,372,036,854,775,808

~

9,223,372,036,854,775,807

有符号整数类型
byte1字节1*8-128 ~ 127有符号整数类型

  1.2 浮点型

类型存储需求bit数取值范围备注
float4字节4*8±1.4E-45 到 ±3.4E+38,有效位数约为 6-7 位小数

单精度浮点数类型。

float类型的数值有一个后缀F(例如:3.14F)

short8字节8*8范围为约 ±4.9E-324 到 ±1.8E+308,有效位数约为 15 位小数

双精度浮点数类型。

没有后缀F的浮点数值(如3.14默认为double类型)

  1.3 char类型

        在 Java 中,char 类型用于表示 Unicode 字符,其取值范围是从 U+0000 到 U+FFFF(包括 0 到 65535 之间的整数)。

       这意味着 char 类型可以表示任意字符,包括字母、数字、特殊符号以及其他语言的字符。Unicode 是一种国际标准编码,涵盖了世界上几乎所有的字符集。

       需要注意的是,Java 中的 char 类型是无符号的,因此它不能表示负数或负值。它只能表示正数范围内的 Unicode 字符。

       虽然 char 类型可以进行算术运算,但它被视为整数类型。对 char 类型进行运算时,会将其转换为相应的整数值进行计算

类型存储需求bit数取值范围备注
char2字节2*8

1.4 布尔类型

       在 Java 中,boolean 类型用于表示逻辑值,只有两个取值:truefalse。它用于表示真假或条件的结果。

类型存储需求bit数取值范围备注
boolean1字节1*8true 或 false

2.Java基本数据的类型转换

       Java 支持自动类型转换(隐式转换)和强制类型转换(显式转换)。

2.1 自动类型转换(隐式转换)

       自动类型转换是指将一个数据类型的值直接赋给另一个兼容的数据类型,而不需要显式地进行类型转换。这种转换通常发生在两个类型之间存在从小范围到大范围、从低精度到高精度的关系时。例如,将一个 int 类型的变量赋值给一个 long 类型的变量,或者将一个 float 类型的值赋给一个 double 类型的变量。

代码示例:

public class Demo{	
	public static void main(String[] args){
        int num = 10;
        long bigNum = num; // 自动将 int 转换为 long
    }
}

Java支持自动类型转换的类型如下所示,左边的数值类型可以自动类型转换成箭头右边的数值类型。

1)byte ->short->int->long->float->double

2)char->int->long->float->double

2.2 强制类型转换(显式转换)

       如果希望上面自动转换中,箭头右边的类型转换成左边的类型,则必须进行强制类型转换。

       强制类型转换的语法格式:(targetType)value,强制类型转换的运算符是圆括号()。

       当进行强制类型转换时,类似于把一个大瓶子里面的水倒入一个小瓶子,如果大瓶子里面的水不多还好,如果大瓶子里面的水很多,将会引起溢出,从而造成数据丢失。

      这种类型也称为缩小转换。

       注意:当试图强制把表数范围大的类型转换为表示范围小的类型时,必须格外小心,因为非常容易引起信息丢失。

以下是一些基础数据类型的强制类型转换示例:

1.从较小的整数类型向较大的整数类型进行转换:

public class Demo{	
	public static void main(String[] args){
        int smallerInt = 10;
        long largerLong = (long) smallerInt; // 强制将 int 转换为 long
        System.out.println(largerLong); // 输出:10
    }
}

 1.从浮点类型向整数类型进行转换(注意小数部分会被截断):

public class Demo{	
	public static void main(String[] args){
        double floatingPoint = 3.14;
        int integer = (int) floatingPoint; // 强制将 double 转换为 int
        System.out.println(integer); // 输出:3
    }
}

3.从较大的整数类型向较小的整数类型进行转换(可能导致溢出):

public class Demo{	
	public static void main(String[] args){
        long largerLong = 9000000000L;
        int smallerInt = (int) largerLong; // 强制将 long 转换为 int
        System.out.println(smallerInt); // 输出:410065408
    }
}

2.3 表达式类型的自动提升

java定义了如下的自动提升规则:

1)所有的byte类型 ,short类型和char类型将被提升到int类型。

2)整个算术表达式的数据类型自动提升到表达式中最高等级操作数同样的类型

public class Demo{	
	public static void main(String[] args){
        //下面2行代码出错,shortValue类型参与运算,类型自动提升到int
        // 将一个int类型的值赋给一个short类型的值,编译不过
        short shortValue = 5;
        shortValue =shortValue +2;
		//下面4行代码正确,3个不同类型的值参与运算,类型提升到最高的类型//double,int,byte中,double类型最高,所以结果double类型
        byte byteValue =4;
        int intValue = 1;
        double doubleValue =2.33;
        double result=byteValue + intValue + doubleValue;
        System.out.println(byteValue + intValue + doubleValue);
        //下面代码的类型同样为double
        System.out.println(doubleValue /intValue);
    }
}
PS:如有错漏之处,敬请指正
  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值