Java新手笔记之数据类型转换

java中数据类型转换分为两种

1.自动类型转换
自动类型转换 大范围小范围兼容
以下是测试int范围内的数字常量 赋值给long类型的结果

public class DemoDataType {
    public static void main(String[] args) {
        DemoDataType t =new DemoDataType();
        System.out.println(1024);//默认是int类型
        long num1=1024;//将默认的int类型复制给long类型变量num1 会隐式类型转换成long类型
        System.out.println(num1);//1024
        System.out.println("num1的对象是:"+t.judgeType(num1));//Long
    }
    //判断数字类型函数
    public String judgeType(Object temp) {
        if (temp instanceof Long) {
            return "是Long类型";
        } else if (temp instanceof Integer) {
            return "是Integer类型";
        } else if(temp instanceof Float){
            return "是Float类型";
        }else if(temp instanceof Double){
            return "是Double类型类型";
        }else{
            return "其他数据类型";
        }
    }
}

从以上测试中能够看出因为long的范围比int的范围大所以会隐式转换成long类型输出结果为

隐式类型转换和字节大小不相关只和范围相关

下面测试 把8个字节的long类型赋值给4个字节的float

public class DemoDataType {
    public static void main(String[] args) {
        DemoDataType t =new DemoDataType();
        System.out.println(1024);//默认是int类型
        float num1=2100000000;//将默认的int类型复制给float类型变量num1 会隐式类型转换成float类型
        System.out.println(num1);//1024
        System.out.println("num1的对象是:"+t.judgeType(num1));//float
    }
    //判断数字类型函数
    public String judgeType(Object temp) {
        if (temp instanceof Long) {
            return "是Long类型";
        } else if (temp instanceof Integer) {
            return "是Integer类型";
        } else if(temp instanceof Float){
            return "是Float类型";
        }else if(temp instanceof Double){
            return "是Double类型类型";
        }else{
            return "其他数据类型";
        }
    }
}

在这里插入图片描述
输出结果为Float类型,由此课件隐式类型转换看的是范围大小而不是字节大小~!

2.强制类型转换
强制类型转换的语法格式 在值 的前面使用括号包含需要转换的类型
超过范围的强制类型转换数据会溢出

public class DemoDataType {
    public static void main(String[] args) {
		//格式:在值的前面添加(类型)
		int num = (int)100L;
		System.out.println(num);
		
		//long强制转换成int类型
		int num2 = (int)6000000000L;
		//数据溢出
		System.out.println(num2);
    }
}

结果:在这里插入图片描述

小数转换成整形

public class DemoDataType {
    public static void main(String[] args) {
		int num = (int)3.8;
		System.out.println(num);
    }
}

在这里插入图片描述
由此可见将浮点数类型强制转换会出现精度损失,不是四舍五入




字符和数字运算的时候 字符会从ASCII表中取出相对应的数字

public class DemoDataType {
    public static void main(String[] args) {
		char str = 'A';
		System.out.println(str + 1);//输出结果66,这时候str会被转换成ASCII表中对应的十进制数65代表键盘上的A字母	
		byte num2 = 40;
		byte num3 = 60;
		byte result1 = num2 + num3;
		System.out.println(result1);//这里会提示  不兼容的类型: 从int转换到byte可能会有损失
    }
}

编译结果在这里插入图片描述
为什么会提示int类型转换到byte类型会有损失呢? 代码中命名没有出现过int类型 两个byte范围内的值相加也没有超过byte类型带着疑问进行下一步探索



public class DemoDataType {
    public static void main(String[] args) {
		char str = 'A';
		System.out.println(str + 1);
		byte num2 = 40;
		byte num3 = 60;
		//讲两个byte类型相加的结果给 int 类型的result1变量
		int result1 = num2 + num3;
		System.out.println(result1);
	}
}

输出结果在这里插入图片描述
由以上结果能够看出来 byte 在运算时会java会自动把它提升成int类型相加…虽然最后的结果是在byte类型范围类,实际已经是int类型,因此int类型赋值给byte类型肯定是不行的. 需要使用int类型的变量去接受;

那么我就要使用byte类型去接受两个byte类型运算的结果该怎么操作?
将提int类型运算的结果转换成byte即可…结果一定要在相对应的规定范围内,

public class DemoDataType {
    public static void main(String[] args) {
		char str = 'A';
		System.out.println(str + 1);
		byte num2 = 40;
		byte num3 = 60;
		byte result1 = (byte)(num2 + num3);//将提int类型
		System.out.println(result1);
	}
}

boolean 类型和其他的一些语言不一样 不会发生数字的转换 没有非零即真的概念

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值