java基础讲义(2)——基本类型的类型转换

本文深入解析Java中的两种类型转换方式:自动类型转换和强制类型转换。详细解释了自动类型转换的原理及应用实例,并通过具体代码演示了强制类型转换的过程和注意事项,包括可能引发的数据溢出问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java语言有两种类型转换方式:自动类型转换和强制类型转换

一、自动类型转换

        如果系统支持把某种基本数据类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。当一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换。如图:

例如:

public class PrimitiveandString
{
    public static void main(String[] args)
    {
          //下面代码错误,因为8是一个整数,不能赋给一个字符串
          //String str = 5;
        //一个基本类型的值和一个字符串连接运算时,基本类型的值会自动转换成字符串
      String str2 = 3.5 + "";
      //下面输出3.5
      System.out.println(str2);
    //下面输出7Hello ,因为先运算3 + 4 =7
     System.out.println(3 + 4 + "Hello");
   //下面输出Hello34,字符串先与3运算,再与4运算
     System.out.println("Hello" + 3 + 4);

    }
}

二、强制类型转换

当试图强制把表数范围大的类型转换成表数范围小的类型时,可能会引起溢出,从而造成数据丢失,所以必须格外小心。例如:

public class NarrowConversion
{
      public static void main(String[] args)
     {
          int iValue = 233;
         //强制把一个int类型的值转换成byte类型的值
         byte bValue = (byte) iValue;
       //输出-23,因为发生溢出
        System.out.println(bValue);
       
     }
}

分析:

233的32位int类型表示为:{00....000}  11101001

            8位byte类型的表示:     11101001 (在计算机中为补码表示形式)

将32位int类型的233强制转换成8位的数值,则需要截断前面的24为,只保留右边8位,其中最左边的1是符号位,此处表明是一个负数,负数在计算机里以补码形式存在,因此还要换算成原码。过程如下:

补码:11101001

反码:11101000    (将补码减1得到反码)

原码:10010111  (即-23)    (符号位不变,其他取反得到原码)


补充:原码是直接将一个数值换算成二进制数。但计算机以补码形式保存所有数据。补码计算规则:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,符号位保持不变。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值