请求高手帮帮忙,本人初学Java是遇到一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:00:27
这个问题是有关Java中的引用变量,有的书上说引用变量保存对象在堆内存中的地址值,而有的又说保存的是对象的哈希码信息,有些书又冒出个“句柄”,现在感到有些迷惑,引用变量中到底保存的是什么呢?还有对象的地址值与对象的哈希码值又有怎样的关系?请哪位前辈指点一下,小弟不胜感激!

存的是实地址值。说是哈希码的其实是说反了:Java里的对象有一个默认的哈希码:对象的内存地址。Object 类的 int hashcode() 默认返回对象的地址。但也可以覆盖它让它返回任意别的什么数,并不需要和内存地址有任何的联系。
说句柄的是面对熟悉C和Windows等操作系统的开发员的。在给Windows编程的时候要用到和引用变量相对应的一个东西,称为句柄。
比如用C在Windows中创建一个窗口可以用这样一句(比较恐怖的)话
HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, hInstance, NULL);
没有接触过的话就不用去理它。

举例:
Object a=new Object();
a:称为引用又叫句柄(台湾的叫法)
引用(句柄)里面存的是 地址(如@de6ced),不存hashcode,hashcode是计算出来的,
基本来说hashcode相同2对象地址相同,但内容不一定会相同,还可以根据hashCode来提取在hash容器中提取对象,涉及到hashcode()一般会追出equals()

引用变量保存的是地址(在栈内),哈希吗值相当于是一个地址的编码方式,也就是说地址是以哈希吗值的形式保存的,不知道兄弟伙你懂没得?

引用类型保存在栈中..
好像与哈希码没有关系。