黑马程序员技术交流社区

标题: java 类型转换原理 [打印本页]

作者: fengche    时间: 2013-10-16 10:03
标题: java 类型转换原理
本帖最后由 fengche 于 2013-10-16 12:12 编辑

public class Demo{
        public static void main (String[] args){
                System.out.println((int)(char)(byte) -1);
        }
}
它打印出来的是65535而不是-1,这是为什么呢?
作者: ☆╰學不会☆╮    时间: 2013-10-16 10:32
你这样写的目的是什么呢?
数据类型之间的转换分为隐含类型转换(或称默认类型转换 )和强制类型转换两种。
自动类型转换按字节长度从“短”到“长”的优先关系依次为:
byte ---- short ---- int ---- long ----float ---- double
byte short char数据类型之间不能互相转换 都可以转成int型
强制类型转换 在变量名前面加上欲转换的类型,程序运行时就会自动将此行语句里的变量做类型转换的处理,并不影响原先定义的类型;
例:byte  a=10;  int b=20; byte c=a+(byte)b    c的输出结构为30
如果不定义数据类型 x=100; 那么变量x 默认的数据类型为int 数字默认
的数据类型为int型。
作者: 斗胆潇洒    时间: 2013-10-16 10:35
在(int)(char)(byte) -1中
(byte) -1 --》10000001--》补码--》11111111,高位是符号位
(char)(byte) -1 --》char两字节,byte才一字节,补成两字节,按符号位补成11111111 11111111
(int)(char)(byte) -1 --》11111111 11111111 --》二进制转int便是65536了
其实-1从char转就可以了,(int)(char)-1 = 65536
作者: loading……99.9    时间: 2013-10-16 11:00
我用myeclipse编写的代码,当我写System.out.println((byte)-1);的时候,我把鼠标放在println上是,显示的是调用println(int x)函数,System.out.println((char)(byte)(-1));当我这么写的时候,鼠标放在println上时,显示的是调用println(char x)函数,当我System.out.println((int)(char)(byte)-1);这么写的时候,鼠标放在println上显示的是调用println(int x)函数,那么我就知道了,是int型的-1转换成了char型,再被转换成了int型,关键是int型的-1转char型发生了变化,大家都知道数字在计算机里存储的都是按补码方式存储,int型的-1那么在计算机里存储的应该是32个二进制的1(int型是4个字节),当发生被强制转换成char型的时候,那么就发生了截取行为,因为char型只有2个字节且没有符合,所以就截取了后面的16位,char型没有符合,16个二进制的1对应的十进制数正好是65535,说以最终打印的是65535。




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