我是靠谱客的博主 俭朴草丛,最近开发中收集的这篇文章主要介绍数据类型转换1 、自动类型转换2 、强制类型转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java当中要求参与的计算数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型转换
    int + int ==>int
    int + long ==> long +long ==>long
        把int转换成long,因为是从小到大,属于自动类型转换,不需要代码的干预
    int+long ==>int + int ==> int
        把long转成了int,因为是从大到小,属于强制类型转换,必须手动代码干预
            
    数据类型中,两种转换方式:自动类型转换和强制类型转换

1 、自动类型转换

        概念:取值范围下的数据或者变量可以直接赋值给取值范围大的变量(小花苗可以栽到大花盆里)
        特点:
            (1)自动类型转换是自动完成的,不需要代码的干预
            (2)byte/short/char类型数据,只要参加运算就会自动转换位int类型
            (3)byte、short、char-->int-->long-->float-->double
        举例:
            有一个byte类型(一个字节)的数字5:    00000101
            byte类型自动类型转换成short类型(两个字节):在左侧补充1个字节的0,因为左侧补充的都是0
                对原有数据是没有影响的,自动转换的结果仍然是5:00000000 00000101
                
            byte类型自动类型转换成int类型(4个字节)
                在左侧补充3个字节的0,因为左侧补充的都是0
                对原有数据是没有影响的,自动转换的结果仍然是5:00000000 00000000 00000000 00000101
            
            byte类型自动类型转换成long类型(8个字节)
                在左侧补充7个字节的0,因为左侧补充的都是0
                对原有数据是没有影响的,自动转换的结果仍然是5:
                00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
            
            总结:根据需求,在数据面前补充若干个0,因为补充的是0,对原有数据大小是没有影响的
                 (打脸充胖子)
            int a = 1;
            byte b = 2;
            byte c = a + b; //这个是错误的
                =赋值符号右侧发生的变化是这样的:int+int ==> int
                =赋值符号左侧使用的是byte类型来接受int类型的赋值,会发生类型不兼容
            所以正确的做法是
            int c = a+b;
            int = int + byte ==> int +int ==>int
            
            int a = 1;
            double b = 0.5;
            int c = a+ b;
            int = int +double ==> double + double ==>double
                =赋值符号右侧:最终饭就的结果是double类型(8个字节)
                =赋值符号左侧:使用int类型(4个字节)来double(8个字节)类型的数据,类型不兼容
            所以正确的做法是
            double c = a + b;

2 、强制类型转换

        概念:从大到小强制转换
                取值范围大的数据或者变量不能直接赋值给取值范围小的变量,所以需要手动代码干预
                    解决办法:
                        (1)把坑变大:把被赋值对象的类型变大
                        (2)把花苗变小:强制类型转换
        格式:
            转后类型变量名称 = (转后类型)转前数据或者变量:
            long类型的数字5转成int类型
            long num = 5L;
            long类型(8个字节)的数据或者变量赋值给int(4个字节)的变量,使用了强制转换
                让赋值符号左右两侧数据类型一致,向左侧类型看齐
            int a = (int)num;
            
        举例:
            有一个long类型(8个字节)的数字5:
                00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
            long类型强制类型转换成int类型(4个字节):
                砍掉左侧的4个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
                00000000 00000000 00000000 00000101
                
            long类型强制类型转换成short类型(2个字节):
                砍掉左侧的6个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
                00000000 00000101
                
            long类型强制类型转换成byte类型(1个字节):
                砍掉左侧的7个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
                00000101
                
            总结:
                根据需求,砍掉数据左侧的若干个字节的内容,只要砍掉的都是0,对原数据没有影响
                    但是,只要砍掉的数据中包含1,就会对原数据产生影响(可能会损失精度)
                    
            举例:
                int num = 6000000000L;
                60亿强制转换成int类型,从大到小的转换,需要进行强制类型转换
                因为int类型的取值范围最大是21亿,所以势必会造成数据精度缺失
                缺失的过程是这样的:
                00000000 00000000 00000000 00000001 01100101 10100000 10111100 00000000
                                                    01100101 10100000 10111100 00000000
                                                    -->1705032704
                            
    2.2 ASCII码表
        计算机里面只能识别0和1,所以我们存储到计算机中的所有内容都会转换成0和1进行存储
        问题:如何把字符转换成0和1呢?
            通过ASCII表:存储字符和数字对应关系的一张表
            
            存储字符时:需要查找ascii码表,找到字符相应的数字,将数字转换成二进制放到计算机中
            'A'--> 65 ----> 01000001        大写字母是连的,ASCII编码值依次+1
            'a'--> 95 ----> 01011111        小写字母是连的,ASCII编码值依次+1    
            '0'--> 48 ----> 00110000        数字字符是连的,ASCII编码值依次+1    
            
            使用字符时,将对应的二进制转换成十进制,找到ASCII码表中对应的字符        


 

最后

以上就是俭朴草丛为你收集整理的数据类型转换1 、自动类型转换2 、强制类型转换的全部内容,希望文章能够帮你解决数据类型转换1 、自动类型转换2 、强制类型转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部