Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3593279
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Java

2019-11-07 11:58:30

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

转换方式:

自动转换

强制转换

boolean类型外,所有的基本数据类型因为各自的精度不同,赋值时都要考虑这个问题

boolean类型外,所有的基本数据类型包括:整型,浮点型,字符型。

算术运算时的转换

整型,浮点型,字符型数据可以混合运算。

运算中相邻两个操作数先转化为同一类型,转换从低级到高级,然后进行运算;运算的结果再 和下一个操作数据进行运算,规则相同

3+'A'+45L

5+3.6+ 'A'+3.14f

赋值运算时的转换

自动类型转换(左>右)

代码示例

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类型的常量

    }

}

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));

    }

}

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等类型变量,而不需要进行强制类型转换,只要不超 出其表数范围

测试自动类型转化

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;

    }

}

测试类型转换常见问题

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);

    }

}

阅读(2120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~