黑马程序员技术交流社区

标题: java类型转换的原理是什么? [打印本页]

作者: 海纳百川1123    时间: 2015-7-14 20:04
标题: java类型转换的原理是什么?
本帖最后由 海纳百川1123 于 2015-7-23 09:39 编辑

如题,java类型转换的原理是什么?请各位帮忙解答解答,谢谢!

作者: 孟卫严    时间: 2015-7-14 20:12
对于数据类型简单的来说就是牺牲精度,换取格式兼容
作者: China_Riven    时间: 2015-7-14 20:46
同一个数的二进制的表现形式有所不同.比如 0000 0011 和0000 0000 0000 0011
作者: fever_ai_my    时间: 2015-7-14 20:48
这个还真没听说过

作者: 何时归来看花开    时间: 2015-7-14 21:00
利用二进制数据转换,每个数据的所占的字节不同
作者: 鲁枝权双元    时间: 2015-7-14 21:04
隐式转换。。。显示转换。
低字节到高字节自动转换
高字节到低字节就得强制转换了
作者: 胡家兵    时间: 2015-7-14 21:10
你说清楚啊!你这个问法本来就是模糊的,就是问了黑马币?
作者: 海纳百川1123    时间: 2015-7-15 00:33
胡家兵 发表于 2015-7-14 21:10
你说清楚啊!你这个问法本来就是模糊的,就是问了黑马币?


这位同学,您这么说话,我就不爱听了。您对 java基础全都掌握了么,老师课件里的每一个知识点都懂了么?还是压根什么都不懂,回复这个帖子,压根就是为了黑马币?
这个地方是大家讨论学习的地方,您觉得这个问题和黑马币有什么联系么?

请看.PNG (102.57 KB, 下载次数: 56)

请看.PNG

作者: 胡家兵    时间: 2015-7-17 22:30
海纳百川1123 发表于 2015-7-15 00:33
这位同学,您这么说话,我就不爱听了。您对 java基础全都掌握了么,老师课件里的每一个知识点都懂了么? ...

这是数据类型转换,那是因为你在常量变量这个标题下它写个类型转换原理,java类型转换原理是什么?
作者: 海纳百川1123    时间: 2015-7-19 18:21
胡家兵 发表于 2015-7-17 22:30
这是数据类型转换,那是因为你在常量变量这个标题下它写个类型转换原理,java类型转换原理是什么? ...

java除了数据类型转换还又其他的类型转换么?数据类型转换的原理是什么,您能给个准确,明确,标准的答案么?
作者: 赵振邦    时间: 2015-7-19 21:49
是因为  不同类型都有不同的存储空间  然而存储空间不同 不能进行转换 则需要进行  类型转换
作者: 花千骨    时间: 2015-7-19 22:20
同求!求大神解答一下啊!
作者: 胡家兵    时间: 2015-7-20 00:03
自动类型转换(隐式转换)
byte char short  -- int  -- long -- float -- double
强制类型转换(显式转换)
(数据类型) 变量或者常量值;
注意问题:
1) 当参与运算的多个数据类型不一致时,参与运算的值会自动转换成范围最大的那个类型然后运算.
2) 而强制类型转换必须保证数据在想转成的数据类型范围内.
3) boolean类型不可以转换成其他类型.

强制类型转换的结果:
以byte为例:
1) 拿到数据后先获取其补码;
2) 然后截取最后8位,得到的是补码;
3) 再通过补码获取其原码, 最后显示给我们的数据是原码的十进制形式.
注意: 计算机中的数据运算都是以补码的形式进行的.
例如:
        byte b1 = (byte)140; // -116
分析:
        140的原码:
                00000000 00000000 00000000 10001100
        这是一个正数,所以其补码也是:
                00000000 00000000 00000000 10001100
        做强制类型转换,截取最后8位,得到的是补码:
                10001100
        观察到这是一个负数,所以想获取其原码,先得到反码(补码减1):
                10001011
        最后获取原码(反码的符号位不变,数值位取反):
                11110100
        这是数的十进制是:
                -116
       
补充: 最小的byte类型数据是 -128        它的二进制表示形式是:1000 0000

关于byte面试题:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; // 此行会报错,因为参与运算的byte类型会自动提升为int类型, 可能损失精度.
byte b4 = 3 + 4; // 没问题,对于字面值常量3和4, jvm会在编译期对其进行计算(优化), 并比较其值是否在byte范围内,如果未超出,则不报错.

上述面试题与下面关于字符串的面试题(模样长得差不多),经常被问到:
String s1 = "a";
String s2 = "b";
String s3 = "ab";
System.out.println(s3 == s1 + s2); // false
System.out.println(s3 == "a" + "b"); // true

ASCII 码表概述:
'a' -- 97
'A' -- 65
'0' -- 48
作者: 海纳百川1123    时间: 2015-7-20 15:36
胡家兵 发表于 2015-7-20 00:03
自动类型转换(隐式转换)
byte char short  -- int  -- long -- float -- double
强制类型转换(显式转换)

谢谢:handshake
作者: 王文辉    时间: 2015-7-20 15:51
这个以前还真没认真想过,学习了
作者: 胡家兵    时间: 2015-7-20 21:03
海纳百川1123 发表于 2015-7-20 15:36
谢谢

和谐就好:lol不好意思啊
作者: 辉大大    时间: 2015-7-20 22:05
隐式转换:小转大;
强制转换:大转小,   计算机底层都是以补码的形式存在的
     将数值先转换为二进制,即原码,再原码转反码,再转补码
          在补码上截取数值,然后转反码,再转成原码  再进制转换为十进制(这是负数的情况)
  正数:直接在原码上截取就可以了,因为正数的原、反、补都一样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2