JAVA Day04

169 阅读2分钟

这是我参与更文挑战的第7天,活动详情查看:更文挑战

类型转换

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

不同类型的数据先转换为同一类型的数据,然后进行计算

char c = 'a';
int i = 1;
System.out.println((int)c+i);//98

基本数据类型转换

基本数据类型转换分为强制类型转换和自动类型转换(隐式类型转换)

自动类型转换方向

char–>int–>long–>float–>double

byte–>short–>int–>long–>float–>double

强制类型转换方向

char<–int<–long<–float<–double

byte<–short<–int<–long<–float<–double

强制类型转换会出现内存溢出的情况

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免.

int i = 128;
byte b = (int)i;//内存溢出
System.out.println(b);//-128
也可能有精度问题
double d1 = 20.7;
int i = (int)d1;
System.out.println(i);//20

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

public class Demo
    public static void main(String[] args){
    int money = 10_0000_0000;//JDK7的新特性,数字之间加_用于区分数字,计算不受影响
    int year = 20;
    int total = money*year;//计算的时候溢出了
    long total2 = money*year;//默认类型int,右边在计算之前就出现问题
    System.out.println(total);//-1474836480
    System.out.println(total2);//-1474836480
    //解决方法:在计算之前先转换数据类型
    long total3 = money*(long)year;
}

自动类型转换 低–高,不会存在内存溢出的问题。

注意点

不能对布尔类型进行转换 不能将变量类型转换为不相干的类型 把高容量数据转换为低容量数据 ,须强制转换 转换的时候会有内存溢出或者精度问题的情况

引用类型转换

向下转型:小类型转大类型

向上转型:大类型转小类型

instanceof:检查引用对象的类型