Java类型转换

类型转换

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

运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级(根据容量来看):

 低 ------------------------------------> 高
 byte,short,char->int->long->float->double
 //小数的优先级大于整数    

类型转换分为强制类型转换自动类型转换

1、强制类型转换

容量大的数据类型转化为容量小的数据类型要用到强制类型转换,转换时要注意内存溢出的问题

强制类型转换的语法格式: (类型)变量名

类型转换的条件是转换的数据类型必须是兼容的。

【演示】

 public class Demo{
 //强制转换格式: (类型)变量名 高--低
 public static void main(String[] args) {
 int i =128;
 byte b = (byte)i; //数据类型为int的i强制转换为byte类型
 ​
 //当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,溢出。
 System.out.println(i); //128
 System.out.println(b); //内存溢出了,byte最大值才127,所以这行的结果是-128
 }

2、自动类型转换

容量小的数据类型可以自动转换容量大的数据类型,这称为自动类型转换

例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为 32,可以自动转换为64位的double类型。

【演示】

 //自动转换  低--高
 public static void main(String[] args) {
 int a = 128;
 double z = a; //容量小数据类型为int的a自动转换为容量大double类型
 ​
 System.out.println(a); //128
 System.out.println(z); //128.0
     
 char c2 = 'A';//定义一个char类型
 int i2 = c2+1;//char 类型和 int 类型计算
 System.out.println("char类型和int计算后的值等于"+i2);//66
     //c2 的值为字符 A ,查 ASCII 码表可知对应的 int 类型值为65,所以i2=65+1=66。
 }

3、在类型转换时需要注意:

  1. 不能对布尔值进行转换;

  2. 不能把对象类型转换为不相干的类型;

  3. 在把高容量转换到低容量的时候,强制转换;

  4. 转换的时候可能存在内存溢出,或者精度问题!

  5. 转换不会四舍五入,而是直接抹去小数位;

  6. 操作比较大的数时,要留意是否溢出,尤其是整数操作时,

    【演示】

  public static void main(String[] args) {
         //操作比较大的数的时候,注意溢出问题
         //JDK7新特性,数字之间可以用下划线分割
         int money1 = 1000000000;
         //int money1 = 100000000000; 溢出了
         int money2 = 1_000_000_000;
 ​
         System.out.println(money1);
         System.out.println(money2);
 ​
         int years1 = 20;
         int total1 = money1 * years1; //输出结果为:-1474836480,计算的时候溢出了
         long total01 = money1 * years1; //money1 * years1认是int,这行相当于把上面一行的结果转换为long,结果还是错的
         long total02 = money1 * (long)years1; //正确写法
         System.out.println(total1); //-1474836480
         System.out.println(total01); //-1474836480
         System.out.println(total02); //20000000000
    }
 }

;

 

本文是学习狂神老师的课程时做的笔记,部分内容参考了狂神老师的视频和随笔

 狂神老师课程链接:https://www.kuangstudy.com/

 

 

 



相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...