java的强制转换是如何实现的

dixuexiongyingss 2012-04-26 12:06:08
以前学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的地址看他们是不是连续的。
请大侠们, 多指教!
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dixuexiongyingss 2012-05-14
  • 打赏
  • 举报
回复
是我的失误,当时犯晕,弄错了,我想成指针了,谢谢各位啦!
商科程序员 2012-04-26
  • 打赏
  • 举报
回复
它就是把一个值复制一下,转换成目标类型后赋给另一个变量。
qybao 2012-04-26
  • 打赏
  • 举报
回复
java不允许直接访问内存,所以没法查看变量的内存地址
java并不是编译成机器码,是一种伪代码,所以变量值是被编译成一个索引,并不像C直接编译成一个相对内存地址
另,在C里面,char c = (char)a;也不能实现c读出0x0102,c也只是0x01,要用char指针指向a的地址才可以,如
char *c = (char*)(&a);
萧十三少 2012-04-26
  • 打赏
  • 举报
回复
就是把大瓶子里的水向小瓶子里面倒,如果大瓶子里面的水不多还好,如果大瓶子里的水很多就会溢出,从而造成数据丢失,所以这种转换也称为“缩小转换”。
qybao 2012-04-26
  • 打赏
  • 举报
回复
对于基本类型来说,就是值拷贝,高位舍去或补0,低级类型转高级类型,高位补0,高级类型转低级类型,高位舍去
对于引用类型,就是内部指针强行转换


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

java的引用类型相当于C里的指针类型,只不过java舍去了指针对内存的操作方法(没有像C那样的&取址操作,更没有memcpy之类的内存拷贝,所以保留下来的指针操作也只有让指针指向新的对象的地址这一功能了)

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧