java long转char溢出_Java学习笔记--类型自动转换、强制类型转换、溢出

package myJavaNotes;

/**

* 类型自动转化

*@author 康爸爸

*@date:   2020年1月21日 上午3:32:08

*

*/

/**

* 强制类型转换

*@author 康爸爸

*@date:   2020年1月21日 下午9:04:41

*

*/

/**

* 溢出

*@author 123

*@date:   2020年1月21日 下午9:58:50

*

*/

public class TypeConversion {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//类型自动转化,容量小的数据类型可以自动转换位容量大的数据类型

//        容量的大小是指表示的范围。

//例:long类型(8个字节)可以自动转化位float(4个字节)类型,即,long类型的变量可以给float类型赋值

//其他类型需要使用强制转换类型()

/**

*               char

*                 ↓

* byte→short→ int → long↙。。。

*                 .  ↘    .

*                 v      v

*               float→double

*

*

* int可以自动转化为short、byte、char类型,不需要进行强制类型转换,只要不超出short、byte、char类型范围即可

* 例:short b = 12;合法

*        short b = 1234567;非法,1234567超出了short的表示范围

* */

int a = 34;

long b = a;//合法,int类型自动转换为long类型

double d = a;//合法,int类型自动转换为double类型

//float f = 1.0;//非法, = 后面的数值为double类型,不能自动转化为float类型

float f = 3;

d = f;//合法,float类型自动转换为double类型

f = a;//合法,int类型自动转换为float类型,但是会有精度缺失

f = b;//合法,long类型自动转换为float类型,但是会有精度缺失

d = b;//合法,long类型自动转换为double类型,,但是会有精度缺失(虚线)

//特例

char q = 123;//等号右边为 int类型且未超过char类型的表示范围,自动转换为char类型

byte w = 123;//等号右边为 int类型且未超过byte类型的表示范围,自动转换为byte类型

short e = 123;//等号右边为 int类型且未超过short类型的表示范围,自动转换为short类型

//但是不能用变量给 char、byte、short赋值,只能用常量

//例:q = a;中a为int类型变量,给char类型的q赋值是非法的

//q = a;//非法

System.out.println("===============================================");

/*

* 强制类型转换:(type)variable

*

* */

System.out.println(q);//输出char类型q == ‘{’

System.out.println((int)q);//将char类型强制转换成int类型

System.out.println("==================================================");

/**

* 1、溢出:操作比较大的数时,要注意是否溢出(结果比要表示的范围大,或者为负数)

* 2、尽量不要命名名字为l的变量,l容易与数字1混淆。

* 3、long类型的变量在赋值时,= 等号右边的常量末尾尽量用大写L结尾,不要用小写l

* */

int money = 1000000000;//10亿

int years = 20;

int total = money * years;

System.out.println("total = "+total);//返回的total时负数,超出了int的范围,溢出;

long total1 = money * years;

System.out.println("total = "+total);//返回的toutal任然时负数。money和years默认时int,因此money*int的结果为int类型,再转换成long类型,但是在int类型的过程中已经溢出,发生数据丢失;

long total2 = money * (long)years;

System.out.println(total2);//返回的total2==20000000000 正确。years先被转换成long类型,而int类型*long类型的结果为long类型,所以未发生溢出,数据未丢失,结果正确

//命名问题

int l = 2;//不太容易分清是小写L还是1

long s = 2345l;//不太容易区分结尾是小写L还是1

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值