类型转换(Java)

类型转换(Java),第1张

类型转换(Java) 类型转换

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


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

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


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

分为:

· 强制类型转换

(类型)变量名 高-->低

强制类型转换需要注意内存溢出问题

例:

 int i = 128;
  byte b = (byte)i;//内存溢出(下面会说)
  
//即可将int转换为byte
  System.out.println(i);
  System.out.println(b);
  //注意此处输出了-128,因为byte的最小值是-128,最大值是127,此时直接赋值128,就会出问题
  //这个问题叫做:内存溢出,内存溢出了,128这个值就变样子了
  //所以我们在转换的时候要尽量避免内存溢出
  //这里加了括号的转换叫做强制转换,是从高到低
· 自动类型转换

什么都不用写,自动会转换 低-->高




例:

int m = 128;
double w = m;
System.out.println(m);
System.out.println(w);
//这里输出了128和128.0,而double上没有写强制转换类型所需要的((double)m)
//说明此处直接进行了类型转换,为自动类型转换。

此处注意:

    不能对布尔值进行转换!

    不能把对象类型转换为不相干的类型(比如不能把一个人变成一头猪,但是可以把一个男人变成一个女人)!

    在把高容量转换为低容量的时候,要进行强制转((想要转换的类型)定义过的变量)!

    转换的时候注意数据大小,避免内存溢出,或者精度问题!






这里可以看到强制转换将b变成数字98,将数字98变成b

char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char)d);
//由Unicode表可知,a所对应的ASCII值为97(字符的本质还是数字!)
//此处字符'a'是char类型的,d是int类型,此处要用强制转换将d转化为char类型
//在输出时再进行强制转换,注意此处得到了98,也就是97+1.
//还可以把98自动转换为char类型,就会得到字符'b',也就是说明在ASCII表里a后面就是b

所有字符本质都是数字,c = a =97,c+1自然就等于98,强制转换后98就是b了。




其他注意点
// *** 作比较大的数据的时候,注意溢出问题
//比如一年赚10亿,赚20年,算一下总数
int money = 1_000_000_000;
//这里在输入较大数据十亿的时候,0很多不好数,可以加下划线_
//“shift+-”
//JDL7新特性,数字之间可以用下划线分割,下划线不会被输出,方便我们写代码的人看
System.out.println(money);
System.out.println("下面是算钱====================================================");
char years = 20;
int total_money = money*years;
System.out.println(total_money);
//按理说应该是输出200亿,但发现他输出了一个负数-1474836480
//这就是因为计算的时候溢出了
//这时候就有人说:我用一个long来计数
long total_money2 =money*years;
System.out.println(total_money2);
//会发现仍然是负数-1474836480,(干了20年,血亏了14亿/doge)
//这是因为int溢出了,再赋值都没有用
//也就是:默认是int,转换之前已经存在问题,他变负数是在int时就变了,用long输出仍然还是负数
//这时候,要么改mone前面的int,换成long:
long money3 = 1_000_000_000;
char years3 = 20;
long total_money3 = money3*years3;
System.out.println(total_money3);
//此时就输出了200亿,马云也直呼内行!
//要么就强制转换类型,直接省的重新再输一次代码,从而输出200亿:
System.out.println("============================================================");
long total_money4 = money*((long)years);
System.out.println(total_money4);
​
//小细节:字母L,尽量用大写L,虽然赋值的时候小写l也可以,但是小写l容易看成1,养成习惯。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5716142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存