java基础2类型转换

本文详细介绍了Java中的类型转换,包括强制类型转换和自动类型转换。强调了在转换过程中可能出现的内存溢出和精度问题,并通过示例展示了如何避免这些问题。此外,还提到了JDK7的新特性,即数字间可用下划线分隔以提高可读性。
摘要由CSDN通过智能技术生成

类型转换

原理

由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。

低------------------------------------------------------------------------------------------->高

byte,short,char ------> int -----> long ------> float ------->double

这些都能进行混合运算。

但是,运算中,不同类型的数据需要先转换为同一类型,然后进行运算。

上述的低到高代表容量。并且小数的优先级大于整数。

问题导入

package com.company;

public class Demon04 {
  public static void main(String[] args){
     int i=128;
     byte b=i;//将i的值赋给b
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9j8bNSG8-1630504515113)(D:\JAVA学习图片\java类型转换\Java类型转换01.png)]

但是根据报错发现,b需要byte类型但是给b的是int类型。

所以我们需要把i转换成int类型。

如何进行类型转换呢?

//在这个变量的前面加上一个括号中间写需要转换的类型就可以了

public class Demon04 {
  public static void main(String[] args){
     int i=128;
     byte b=(byte) i;
      //在这个变量的前面加上一个括号中间写需要转换的类型就ok了
      System.out.println(b);
      System.out.println(i);
  }
}

强制类型转换

强制转换:(类型)变量名 由高字节范围到高字节范围的数据类型的转换。

内存溢出

运行上面的代码发现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XOTrN0X-1630504515116)(D:\JAVA学习图片\java类型转换\Java类型转换02.png)]

输出的b=-128与i不相等。

原因是因为byte类型最大值为127

而给byte的类型赋值128就有了一个内存溢出的问题。

内存溢出数就会完全变样子了。

自动类型转换

自动转换:不需要操作 由低字节范围到高字节范围的数据类型的转换。

package com.company;

public class Demon04 {
  public static void main(String[] args){
     int i=128;
     double b=i;
      System.out.println(b);
      System.out.println(i);
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIUEOyWu-1630504515117)(D:\JAVA学习图片\java类型转换\Java类型转换03.png)]

所以由低字节范围到高字节范围的数据类型的转换不需要任何操作

注意点

  • 不能对布尔值(boolean)进行转换

  • 不能把对象类型转换为不相干的类型

  • 在把高容量转换到低容量时是强制转换,转换的时候可能遇见内存溢出以及精度问题

    如图

      public class Demon04 {
        public static void main(String[] args){
           double b=37.3;
           int i=(int)b;
            System.out.println(b);
            System.out.println(i);
        }
      }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWMGMoZ4-1630504515119)(D:\JAVA学习图片\java类型转换\Java类型转换04.png)]

操作比较大的数时,注意溢出问题。

JDK7新特性:数字之间可以用下划线分割。下滑线并不会被显示。

public class Demon04 {
  public static void main(String[] args){
     int money=10_0000_0000;
     System.out.println(money);
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wcDkXlc-1630504515121)(D:\JAVA学习图片\java类型转换\Java类型转换05.png)]

public class Demon04 {
  public static void main(String[] args){
     int money=10_0000_0000;
     int years=20;
     int total=money*years;
     System.out.println(total);
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4p2p2kqj-1630504515123)(D:\JAVA学习图片\java类型转换\java类型转换06.png)]

计算的时候溢出了

换成long类型

public class Demon04 {
  public static void main(String[] args){
     int money=10_0000_0000;
     int years=20;
     int total=money*years;
     long total2=money*years;
     System.out.println(total);
      System.out.println(total2);
      /*money与years默认是int所以计算后的也是int型之后再转换成long型转换之前以及出错了*/
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iyDU3OoK-1630504515124)(D:\JAVA学习图片\java类型转换\java类型转换07.png)]

money与years默认是int所以计算后的也是int型之后再转换成long型转换之前以及出错了

那么需要如何操作呢?

先把其中一个数换成long类型就行了

public class Demon04 {
  public static void main(String[] args){
     int money=10_0000_0000;
     int years=20;
      long total3=money*((long)years);
      System.out.println(total3);
  }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZaB90aEp-1630504515124)(D:\JAVA学习图片\java类型转换\Java类型转换08.png)]

小知识

一个数后加L也会是long型的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值