数据类型转换 强转和自转 类型提升

类型转换:

        不同类型的变量相互赋值时

   

        强转语法(显式):       

                范围小的数据类型 变量名 = (范围小的数据类型)范围大的数据类型

         自转(隐式):

                等号左边是范围大的数据类型  等号右边范围小的自动转为范围大的

int a = 10;
long b = 100L;
b = a;//可以通过编译 
//a的范围小 b的范围大 将a赋值给b时 编译器自动将a提升为long类型后赋值
a = b;//编译失败
//long的范围比int范围大 会有数据丢失 不安全
a = (int)b;//强转后,编译成功

        特殊情况:


    byte g = 127;//[-128,127]
    //此时 当给byte类型赋值的时候,数据如果没有超过byte的取值范围的时候,编译器认为这是合理的
    byte h = (byte)128;// -128

    byte c = (byte)127;
	byte d = (byte)128;
	byte e = (byte)129;
	System.out.println(c + " " + d + " " + e + " ");// 127 -128 -127 

 在Java中 当参与运算数据类型不一样时 会进行类型转换

Java类型转换分为两类 自动类型转换(隐式) 强制类型转换(显式)

隐式 小转大

数据范围小的自动转换为数据范围大的

显式 大转小

数据范围大的转换为数据范围小的需要强转

不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型

如果需要把范围大的类型赋值给范围小的,需要进行强制类型转换,但可能精度丢失

将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查

强制转换不一定能成功,不相干的类型不能相互转换(比如boolean)

强转的缺陷:

        精度的可能丢失

    int a = 10;
    double b = 20.2;
    System.out.println(a + (int)b);

        数据溢出

    int i = 1080;// 4字节
    byte m = (byte)i;// 1字节

类型提升:

        不同类型的数据之间相互运算时(除boolean) 数据类型小的会被提升到数据类型大的

        小升大

        int和long之间 int会被提升为long

    int aa = 10;
	long bb = 20;
	int cc = aa + bb;//编译出错 int+long-->long+long 赋值给int时会丢失数据
	long dd = aa + bb;//编译成功  int+long-->long+long 赋值给long

        byte与byte的运算

        byte a = 10;
		byte b = 20;
		byte c = a + b;//编译出错 
		//a b都是byte 但是计算a+b时会先将a和b都提升成int 再进行计算 得到的结果也是int
		//计算机cpu通常是按照4个字节为单位从内存中读写数据
		// 对于short byte这种比4个字节小的类型 会先提升成4个字节的int 再进行运算
        byte d = (byte)(a + b);//这样就可以了

        int转String

    int a = 10;
	String s = String.valueOf(a);
	System.out.println(s);
	String str = a+””; 
    //字符串和其他类型相加 结果是字符串?
    int a = 10;
	int b = 20;
	System.out.println(a+b+" hello");//30 hello
	System.out.println("hello"+a+b);//hello1020

        String转int

    String str = “12345”;
    int ret = Integer.parseInt(str);
    System.out.println(ret);

        

         所有的byte、short、char类型被自动提升到int类型,再参与运算

    int a = 'a' + 1;//98
    //char自动提升为int类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值