前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础-基本数据类型之间的转换

Java基础-基本数据类型之间的转换

作者头像
cwl_java
发布2019-11-12 13:02:14
4980
发布2019-11-12 13:02:14
举报
文章被收录于专栏:cwl_Java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102930817

在赋值运算或算术运算时,要求数据类型相同,否则要进行类型转换

  • 转换方式:
    • 自动转换
    • 强制转换
  • 除boolean类型外,所有的基本数据类型因为各自的精度不同,赋值时都要考虑这个问题
  • 除boolean类型外,所有的基本数据类型包括:整型,浮点型,字符型。
算术运算时的转换
  • 整型,浮点型,字符型数据可以混合运算。
  • 运算中相邻两个操作数先转化为同一类型,转换从低级到高级,然后进行运算;运算的结果再 和下一个操作数据进行运算,规则相同
代码语言:javascript
复制
3+'A'+45L
5+3.6+ 'A'+3.14f
在这里插入图片描述
在这里插入图片描述
  • 赋值运算时的转换 自动类型转换(左>右)
代码示例
代码语言:javascript
复制
package com.cwl.base.day01;

/**
 * @program: java_base
 * @description: 测试基本数据类型(整型变量)
 * @author: ChenWenLong
 * @create: 2019-11-05 15:11
 **/
public class TestPrimitiveDataType {

    public static void main(String[] args) {
        //测试整型变量
        int  a = 15;
        int  b = 015;	//以0开头是八进制
        int  c = 0x15;	//以0x开头是16进制
        int  d = 0b1101;	//以0b开头是二进制

        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

        byte  age = 30;
        short  salary = 30000;
        int   population = 2000000000;			//整型常量默认是int类型
        long  globalPopulation = 7400000000L;	//后面加L就是这是一个long类型的常量


    }
}
代码语言:javascript
复制
package com.cwl.base.day01;

import java.math.BigDecimal;

/**
 * @program: java_base
 * @description: 测试浮点型
 * @author: ChenWenLong
 * @create: 2019-11-05 15:13
 **/
public class TestPrimitiveDataType2 {

    public static void main(String[] args) {
        float a = 3.14F;
        double b = 6.28;
        double c = 628E-2;

        System.out.println(c);

        // 浮点数是不精确的,一定不要用于比较!
        float f = 0.1f;
        double d = 1.0 / 10;
        System.out.println(f == d); // 结果为false

        float d1 = 423432423f;
        float d2 = d1 + 1;
        if (d1 == d2) {
            System.out.println("d1==d2");// 输出结果为d1==d2
        } else {
            System.out.println("d1!=d2");
        }

        System.out.println("##################");
        //使用精确浮点运行,推荐:BigDecimal
        BigDecimal bd = BigDecimal.valueOf(1.0);
        bd = bd.subtract(BigDecimal.valueOf(0.1));
        bd = bd.subtract(BigDecimal.valueOf(0.1));
        bd = bd.subtract(BigDecimal.valueOf(0.1));
        bd = bd.subtract(BigDecimal.valueOf(0.1));
        bd = bd.subtract(BigDecimal.valueOf(0.1));
        System.out.println(bd);// 0.5
        System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);// 0.5000000000000001

        BigDecimal  bd2 = BigDecimal.valueOf(0.1);
        BigDecimal  bd3 = BigDecimal.valueOf(1.0/10.0);

        System.out.println(bd2.equals(bd3));

    }
}
代码语言:javascript
复制
package com.cwl.base.day01;

/**
 * @program: java_base
 * @description: 测试字符类型和布尔类型
 * @author: ChenWenLong
 * @create: 2019-11-05 15:14
 **/
public class TestPrimitiveDataType3 {

    public static void main(String[] args) {
        char  a = 'T';
        char  b = '尚';
        char c = '\u0061';
        System.out.println(c);

        //转义字符
        System.out.println(""+'a'+'\n'+'b');
        System.out.println(""+'a'+'\t'+'b');
        System.out.println(""+'a'+'\''+'b');		//a'b


        //String就是字符序列
        String  d = "abc";

        //测试布尔类型
        boolean  man = false;

        if(man){		//极端不推荐:man==true
            System.out.println("男性");
        }

    }
}
总结
  • =右侧:所有变量先转换为字节数最多的数据类型,再计算
  • =两侧:左侧宽度>右侧宽度 自动转换
  • 左侧宽度<右侧宽度 强制转换
  • 特例
    • 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超 出其表数范围
测试自动类型转化
代码语言:javascript
复制
package com.cwl.base.day01;

/**
 * @program: java_base
 * @description: 测试自动类型转化
 * @author: ChenWenLong
 * @create: 2019-11-05 15:17
 **/
public class TestTypeConvert {

    public static void main(String[] args) {
        int  a = 324;
        long  b = a;
        double  d = b;
//		a = b;
//		long  e = 3.23F;
        float  f = 234324L;

        //特例
        byte  b2 = 123;

    }
}
测试类型转换常见问题
代码语言:javascript
复制
package com.cwl.base.day01;

/**
 * @program: java_base
 * @description: 测试类型转换常见问题
 * @author: ChenWenLong
 * @create: 2019-11-05 15:18
 **/
public class TestTypeConvertError {

    public static void main(String[] args) {
        int money = 1000000000; //10亿
        int years = 20;
        //返回的total是负数,超过了int的范围
        int total = money*years;
        System.out.println("total="+total);
        //返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生//了数据丢失
        long total1 = money*years;
        System.out.println("total1="+total1);
        //返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
        long total2 = money*((long)years);
        System.out.println("total2="+total2);

        long   total3 = 34L*3223*years*223423;
        System.out.println(total3);
        //命名问题
        int l = 2; //分不清是L还是1,
        long a = 23451l;//建议使用大写L
        System.out.println(l+1);

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算术运算时的转换
  • 代码示例
  • 总结
  • 测试自动类型转化
  • 测试类型转换常见问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档