java中的句柄和c++中的句柄在作用上我认为完全相同:引用对象的唯一标识,或者说是一个标识符,是拿来标识对象或者项目的。而在c++当中似乎讲到 句柄是一种指向指针的指针。而java中已经没有”指针”这个概念?
java中,人们更倾向与将句柄认为是一个对对象的”引用”,当然更可以把它类比”指针”,事实上《think in java》里面就是这么讲的,深入理解起来的话,这样讲也没有问题,但深入理解起来的话就有点让人模糊了。什么是引用?怎么实现的?
这里我借用c++里面的思维很容易进行理解:
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
实际中的代码也可以看出这一点:
Pager a = new Pager();
Pager b;
System.out.println(new Pager());
System.out.println(a);
结果:
com.webmachine.model.Pager@5224ee
com.webmachine.model.Pager@f6a746
可以看出这两行打印出了对象的地址,不同的是一个使用的是对象句柄。 所以这句代码确切的解释应该是:
Pager a//创建句柄
Pager a = //句柄引用
new Pager();//创建对象实例
Pager a = new Pager();//句柄引用对象实例
由此我认为《think in java》中讲到句柄操控对象(C++中我不能确定),这个说法非常不确切。应该强调的是 句柄操控对象实例,简而言之:对象被创建,实例被引用。