日期:2014-05-20  浏览次数:20601 次

java的强制转换是如何实现的
以前学C, 刚接触java。求教:
byte a = (byte)0x01;
byte b = (byte)0x02;
char c = (char)a;
强制转换后c=?
java的强制转换是怎样实现的,在C里如果a,b地址连续,c读出的值可能是0x0102.在java里我想测试一下,测试后的结果是0x01。所以我想得到a,b的地址看他们是不是连续的。
请大侠们, 多指教!

------解决方案--------------------
java不允许直接访问内存,所以没法查看变量的内存地址
java并不是编译成机器码,是一种伪代码,所以变量值是被编译成一个索引,并不像C直接编译成一个相对内存地址
另,在C里面,char c = (char)a;也不能实现c读出0x0102,c也只是0x01,要用char指针指向a的地址才可以,如
char *c = (char*)(&a);

------解决方案--------------------
对于基本类型来说,就是值拷贝,高位舍去或补0,低级类型转高级类型,高位补0,高级类型转低级类型,高位舍去
对于引用类型,就是内部指针强行转换

Java code

class A {...}
//相当于C的 typedef struct A {... }

class B extends A {...} 
//相当于C的typedef struct B {struct A super;... } 
//也就是有个super指针,当然java中的super实现并不那么简单

B b = new B(); //相当于C的 B* b = (B*)malloc(sizeof(B));
A a = (A)b; //相当于C的 A* a = (A*)b