Java的基础语法——数据类型转换

Java的基础语法——数据类型转换,第1张

类型转换

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

字节大小
低容量(小) —————————————————————————————————————> 高容量(大)
  byteshortchar -> int -> long -> float -> double

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

为什么 long 是 46 字节却排在 float 32 字节之后呢?
因为,小数的优先级一定大于整数,浮点数的数值范围比整数的数值范围大

  • 强制类型转换 (类型)变量名 高 -> 低
    • 低容量转低容量时,需要(类型)变量名,进行强制转换
    //举例(所有代码最好跟着写,更方便理解)
    int i = 128;
    byte b = (byte) i; //强制类型转换
    
    System.out.println(i);
    System.out.println(b);
    
    //运行结果为
    128
    -128
        
    /*
    为什么是i等于128,而b却等于-128?
    因为:Byte的最大值是127,然而给它赋值了一个128,
    就会出一个叫做“内存溢出”的问题
    内存提出,值就会完全变样了
    
    需要尽量避免
    */
    
  • 自动类型转换 低 -> 高
    • 低容量转低容量时,会自动进行转换,不需要进行任何多余的 *** 作
    //举例
    int i = 128;
    double b = i;
    
    System.out.println(i);
    System.out.println(b);
    
    //运行结果为
    128
    128.0	//自动转换成浮点数,所以带上了小数点
    

举例:小水杯可以把水倒进大水杯里,大水杯的水倒进小水杯就会溢出(尽量避免,下面也有讲解)

顺口溜:低到高自动转,高到低需强转

注意点:
  1. 不能对布尔值进行转换
  2. 不能把对象类型(变量也叫对象)转换为不相干的类型
  3. 在把高容量转换到低容量的时候,要强制转换
  4. 转换的时候可能存在内存溢出或者精度问题
//精度问题举例
System.out.println((int)23.4);
System.out.println((int)-45.89f);

//运行结果为
23
-45

//强制转换造成的精度丢失
//再次为强制转换举例
char c = 'a';
int d= c+1;

System.out.println(d);
System.out.println((char)d);
//运行结果为
98
b
    
/*
所有字符本质都是数字(详情百度:Unicode表)
c=a=97,c+1自然等于98,强制转换后98就是b了
*/

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

//举例

int money =1000000000;
/*
上面那么多零是不是让人看得眼花缭乱呢,很好解决
JDK7 新特性:数字间可以使用“_”分割,且“_”并不会被输出
*/
int money =10_0000_0000;
int year = 20;
int total = money*year;
System.out.println(total);

//运行结果为
-1474836480 //内存溢出

//这里有人会想到加一行这样的代码
long total2 = money*year;

/*
运行结果仍然为:-147483648

因为第8行与第9行是int类型,
于是在 money*year 这里计算完会转换为int,
第23行这一步骤进行之后才会转换为long类型,
也就表明,在转换long之前就已经存在问题

所以不可以这样做
*/
//正确的应该这样
int money = 10_0000_0000;
int year = 20;
int total = money*year;

//这样可以提升整个表达式,全部用long计算,就没有问题了
long total2 = ((long)money*year);

System.out.println(total2);

//运行结果为
20000000000

前路漫漫,与君共勉!

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

原文地址: http://outofmemory.cn/langs/735249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存