A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 海纳百川1123 于 2015-7-23 09:39 编辑

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

16 个回复

倒序浏览
对于数据类型简单的来说就是牺牲精度,换取格式兼容
回复 使用道具 举报
同一个数的二进制的表现形式有所不同.比如 0000 0011 和0000 0000 0000 0011
回复 使用道具 举报
这个还真没听说过
回复 使用道具 举报
利用二进制数据转换,每个数据的所占的字节不同
回复 使用道具 举报
隐式转换。。。显示转换。
低字节到高字节自动转换
高字节到低字节就得强制转换了
回复 使用道具 举报
你说清楚啊!你这个问法本来就是模糊的,就是问了黑马币?
回复 使用道具 举报
胡家兵 发表于 2015-7-14 21:10
你说清楚啊!你这个问法本来就是模糊的,就是问了黑马币?


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

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

请看.PNG
回复 使用道具 举报
海纳百川1123 发表于 2015-7-15 00:33
这位同学,您这么说话,我就不爱听了。您对 java基础全都掌握了么,老师课件里的每一个知识点都懂了么? ...

这是数据类型转换,那是因为你在常量变量这个标题下它写个类型转换原理,java类型转换原理是什么?
回复 使用道具 举报
胡家兵 发表于 2015-7-17 22:30
这是数据类型转换,那是因为你在常量变量这个标题下它写个类型转换原理,java类型转换原理是什么? ...

java除了数据类型转换还又其他的类型转换么?数据类型转换的原理是什么,您能给个准确,明确,标准的答案么?
回复 使用道具 举报
是因为  不同类型都有不同的存储空间  然而存储空间不同 不能进行转换 则需要进行  类型转换
回复 使用道具 举报
同求!求大神解答一下啊!
回复 使用道具 举报
自动类型转换(隐式转换)
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
回复 使用道具 举报 1 0
胡家兵 发表于 2015-7-20 00:03
自动类型转换(隐式转换)
byte char short  -- int  -- long -- float -- double
强制类型转换(显式转换)

谢谢:handshake
回复 使用道具 举报
这个以前还真没认真想过,学习了
回复 使用道具 举报

和谐就好:lol不好意思啊
回复 使用道具 举报
隐式转换:小转大;
强制转换:大转小,   计算机底层都是以补码的形式存在的
     将数值先转换为二进制,即原码,再原码转反码,再转补码
          在补码上截取数值,然后转反码,再转成原码  再进制转换为十进制(这是负数的情况)
  正数:直接在原码上截取就可以了,因为正数的原、反、补都一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马