fantasticDream

自动类型转换

自动类型转换:

容量小的数据类型可以自动转换为容量大的数据类型.

{这里的容量并不是字节数而是表述的范围} 

Int i=3;

Double d=1;

Float f=1;

Double d2=f;

特例:

可以将整型常量直接赋值给byte ,short,char等类型变量, 而不需要运行强制类型转换,只要不超过其表数范围

Short b=12; //合法

Short b=1234567;//非法

 

看下图 :  按箭头表示的方向就代表可以自动转

比如:

byteshort没有问题  Shortint没有问题  Charint也没有问题  Int转为long没有问题  Int转为double没有问题 float转为double没有问题

Int也可以转float但是有可能损失精度  Long也可以转为float有可能损失精度  Long也可以转为double有可能损失精度

注:  

java代码中print输出中文时,会显示乱码,这个时候先在vs 打开.java文件到编辑器界面,然后在vs code 界面右下角,点以下那个默认的 UTF-8 ,然后在弹出的选项选择第二个:以编码方式保存,然后在接下来弹出的下拉选项输入框输入GBK,选择gbk编码回车(或者直接鼠标点以下GBK这一行),等待左下角compile完成后,再次运行就能输出无乱码的中文了。

 强制类型转换

强制类型转换,又被成为造型,用于显式的转换一个数据的类型,在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度减低或溢出..

当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值.

 运算时类型提升问题 

基本类型转化时常见错误和问题

操作比较大的数时,要留意是否溢出,尤其是整数操作时

Int money = 1000000000; //10亿

Int years = 20;

Int total = money*years;//返回一个负数 

Long total1= monuy*years;//返回的仍然是负数,默认是int,因此结果会转成int,再转成long.但是已经发生了数据丢失

Long total2 =money*(long)years;//先将一个因子变成long,整个表达式发生提升.全部用long来计算

Ll的问题:

-不要命名名字为的变量

-long类型使用大写L不要写小写. 

// 测试自动转型和强制转型

public class Testchar {

    public static void main(String[] args) {

        // byte b=123;

        // byte b2=300;

        // 可能损失精度

        // char c=-3;       

        // char c2='a';

        // int i=c2; 

        // int可以自动转型为long\ 

        // long d01=123456;       

        // 可能损失精度       

        // float f=d01;

        // 容量小的数据类型可以自动转换为容量大的数据类型.

        // {这里的容量并不是字节数而是表述的范围} 

        // int i2 =-100;

        // int转char自动转型会报错提示(不兼容的类型: 从int转换到char可能会有损失),

        // 强制类型转换在标识符强制类型转换为的类型就ok 

        // -100超过char的表数范围,所以转换成完全不同的值,无意义的值

        // char c3=(char)i2; 

        // System.out.println(c3); 

        // 运算时类型提升问题

        int a=3;

        long b=4;

        double d=5.5;

        // 这里提升为long;

        // 这里自动提升类型为long 用(int)(a+b)强制转型为int并赋值给int同类型

        int c=(int)(a+b);//做所有的二元运算符(+-*/%),都会有类型提升的问题

        System.out.println(c);

        // 这里自动提升类型为double 用(float)(a+d)强制转型为float并赋值给float同类型

        float f= (float)(a+d);//如果超了范围不行的话,进行自动转型

        System.out.println(f); 

        int money = 1000000000; //10亿

        int years = 20;

        // 两个int乘完的值也是int明显数值溢出了所以出了一个负值

        // int total = (long)money*years;//返回一个负数

        // 这里的值已经溢出了必须先转型在赋值

        // long total = (long)(money*years);//返回一个负数

        long totall = (long)money*years;

        // System.out.println(total);

        System.out.println(totall); 

        // 一个人70年心跳多少次

        // 建议以后把L放在最前面,因为有可能在前面承德时候已经溢出了,继续乘还是溢出的值

        long times = 70L*60*24*365*70;

        System.out.println(times); 

    }

}

posted on 2022-05-12 23:13  神奇的梦  阅读(55)  评论(0)    收藏  举报

导航