public class EqualsMethod{
 public static void main(string[] args){
  integer n1=new integer(47);
  integer n2=new integer(47);
 }
}
************
class value{
 int i;
}
public class EqualsMethod{
 public static void main(string[] args){
  value v1=new value();
  value v2=new value();
  vl.i=v2.i=100;
 }
}
这两个方法有什么区别?除了赋值方式不一样以外。
他们是如何访问和创建的? 
怎么区分对象和句柄?

解决方案 »

  1.   

    think in java 里面说第一个是句柄,第二个是对象
    到底句柄跟对象的定义区别在哪里?
      

  2.   

    v1,v2是指向对象(new value())的句柄
      

  3.   

    java里面的句柄和对象句柄是不是不同的?哪一个相当于指针阿?
      

  4.   

    java中的句柄也就是我们通常所说的引用,相当于指针
      

  5.   

    越说越糊涂,我感觉没必要吧。
    我理解的对象和句丙基本是相同的。第一个创建的对象的时候把47传递进构造函数第二个是把值传进Value类的数据成员i中没什么特别啊。
      

  6.   

    对象就好比“我”本身,句柄就好比“我 ”的名字。由于JAVA虚拟机在内存里虚拟了一台“计算机”,所以涉及到 堆和栈的问题,对象都是在堆里创建的,句柄实际上就是C++里的指针,是存放在栈上的,用来指向堆里的对象。
      

  7.   

    在java中对象是一个很抽象的概念!对象是以它的实例的形式存在的。
    声明了一个类型的变量也就是声明了一个该类型的对象。但是这个对象只是一个抽象的概念,并不会在内存中存在,只有实例化这个对象之后,才会在内存中分配空间。
    可以这么理解 :声明了一个int a 但并没有初始化它,它就不会具有值。只有a=0这样初试化a之后,a才具有0这个值。
    实例化对象时就会产生一个指向该对象的这个实例的句柄。以此为例:
    class value{
     int i;
    }
    public class EqualsMethod{
     public static void main(string[] args){
      value v1=new value();
      value v2=new value();
      vl.i=v2.i=100;
     }
    }
    在class EqualsMethod 中value v1=new value();
                           value v2=new value();
    这2行首先value v1    value v2 
    声明了v1,v2 2个value类型的对象。
    然后用new运算符实例化了v1,v2两个对象。
    而v1,v2这两个标识符,代表的分别是两个指向对象实例的句柄。然而当v1.i时我使用的v1这个标识符,并不是对象,我们无法直接操纵对象实例
    v1是指向这个对象的句柄,v2也是一样。我们通过句柄访问对象实例。所以在这里v1,v2是句柄,它们所指向的对象我们是看不见的。个人的理解!欢迎指出错误:)