Java基础语法-类型转换

1.类型转换的分类

因为Java是强类型语言,所以在java程序中,不同基本类型的值经常需要在不同类型之间进行转换。
Java中的类型转换有以下两种 :

  • 自动类型转换
  • 强制类型转换

在运算中,不同类型的数据先转换为同一类型,然后进行运算。
但是转换只能是相关的类型进行转换,不相干的不可以进行转换,比如 boolean 和 int 就不可以。

2.自动类型转换

系统支持把某个基本类型的值直接赋值给另一种基本类型的变量,成为自动类型转换。

char
short
byte
int
long
float
double

以上 其中数据类型,从左到右 可以进行自动类型转换!
即 : 数据范围小的 转换为 数据范围大。

    /*
    自动类型转换
    */
    byte byte11 = 10;
    int int11 = byte11; // byte --> int
    double double11 = int11; // int --> double11
    System.out.println("byte11 : "+byte11);
    System.out.println("int11 : "+int11);
    System.out.println("double11 : "+double11);

    // 下面是 控制台输出的内容
    byte11 : 10
	int11 : 10
	double11 : 10.0
	

如果在算数表达式中含有int、long、float、double型的数据,java首先会将所有数据类型相对较低的变量自动转换为表达式中数据类型最高的数据类型,然后再计算,并且计算结果的数据类型也为表达式中数据类型相对最高的数据类型。

    /*
      包含 int,long,float,double 的自动类型转换
    */
    int int33 = 10;
    double double33 = 1000;
    double res33 = double33 + int33; // int 被自动转为 double
    System.out.println("res33 : "+res33); // 结果应该是double类型的值
    
    // 下面是 控制台的输出结果
    res33 : 1010.0
    

如果在算数表达式中只含有byte、short、char型的数据,java首先将所有变量的类型自动转换成int型,然后在进行计算,并且计算结果的数据类型也为int型。byte、short、char三者之间不能直接相互转换。

	/*
	 自动转为 int 类型
	*/
    byte byte44 = 12;
    char char44 = 'a'; // 97
    System.out.println(byte44 + char44); // 12 + 97 = 109
    
	// 下面是 控制台的输出结果
	109
	

3.强制类型转换

数据范围大的 转换为 数据范围小的。
会出现内存溢出精度问题。
语法 : 等式右边增加(类型)表示强制转换类型。

	/*
    强制类型转换
    */
    double double22 = 130.2345;
    int int22 = (int)double22; // 只保留了整数部分
    byte byte22 = (byte)double22; // 此处会出现内存溢出,因为 byte的最大值是127
    System.out.println("double22 : "+double22);
    System.out.println("int22 : "+int22);
    System.out.println("byte22 : "+byte22);
    
    //下面是  控制台输出内容
    double22 : 130.2345
	int22 : 130
	byte22 : -126

4.分析一个例子

	/*
    下面是内存溢出的情况分析
    */
    int money = 10_0000_0000; // 这是 10亿,jdk7新特性,数字之间可以加下划线
    int years = 20;
    int total1 = money * years; // 200亿,已经大于int类型最大值,发生了内存溢出
    long total2 = money * years; // 没有效果,因为转换之前已经内存溢出了
    long total3 = money * (long)years; // 这样就会先自动转为long,在进行计算,就ok了
    System.out.println("total1 : "+total1);
    System.out.println("total2 : "+total2);
    System.out.println("total3 : "+total3);
    
    //下面是  控制台输出内容
	total1 : -1474836480
	total2 : -1474836480
	total3 : 20000000000
	

5.完成

Congratulations!
You are one step closer to success!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值