java中的类型转换

来源:互联网 发布:win10装mac os虚拟机 编辑:程序博客网 时间:2024/05/16 23:33
可能我们只是留意了一个int代表的是整数,占用了4个字节,而float可以代表小数,而double呢,好吧,能代表更精确的小数,那到底有多精确呢(“如果,你感觉你的程序对精确度要求很高,那么你可以使用double”,我们往往也都是那么一说)

primitive类型之间的转换?
好的,一个int占用4个字节,而一个byte占用了1个字节
当int转到byte,低位的8传给byte
而byte转到int呢,因为byte占1个,而int占4个,那么直接将数值赋过去就行了,然后,高位补0
    请注意上面的一句话,没错,那是错误的,它也是所有梦魇的开端
    如果你还认为是的对,那么你可以看看下面的实验

实验1:    
byte a = (byte) 0xf0;
int b = a;
System.out.println(Integer.toBinaryString(b));
    你将会看到:11111111111111111111111111110000,一共32个数字
    
实验2:
byte a = (byte) 0x0f;
int b = a;
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(b).length());
    你将会看到:1111,一共4个数字(为什么不是32,因为:前面都是0,不给你展示了)
    
那么,我们得出了一个结论:
    byte到int转换时,
        如果byte的最左边的数字是0,那么转换后的int的左端全是0,
        否则,全是1
上述结论也适应于其他 小类型 转换到 大类型
我们在大学的时候就学过了,其中还学到什么补码等东东

你容易忽视的一个例子:
我有两个byte,分别是a和b,我想将它们相加,然后赋予给另外一个byte c
你可能会写:byte c = a + b;
然后eclipse告诉你:Type mismatch: cannot convert from int to byte
则:两个byte数相加后变成了一个int?是:a和b分别转成int,然后是两个int相加

原创粉丝点击