句柄指向对象是通过Object类的hashCode()实现的, 如果两个所谓句柄如果指向的对象是一样的话他们的hashCode就是一样的 ==比较也就是比较他们的hashCode ----------------------------------------------------------------------------------------- public class Text_object{ String s,b; public Text_object(){ s=new String("test"); b=new String("test"); System.out.println(b==s); System.out.println(b.equals(s)); System.out.println(b.hashcode()); System.out.println(s.hashcode());} public Text_object(String t){ s=new String("test"); b=s; System.out.println(t); System.out.println(b==s); System.out.println(b.equals(s)); System.out.println(b.hashcode()); System.out.println(s.hashcode()); } public static void main(String args[]){ new Text_object("this is test a hashcod"); new Text_object(); } } 大哥 我回去做了实验了,看了hashcode的文档。 如果 一个类的object相等hashcode值也一样,而你说的==是比较他们的hashcode是错误的。
String s=new String ("abc");
String b=new String ("abc");
b.equals(s);这个结果是true ;
b==s 这个结果是false;
我是这么理解的,new 一下就产生一个对象是在放在堆中。
因为刚刚这2句话String s=new String ("abc");
String b=new String ("abc");调用是jdk api String 类的同一个构造函数所以在堆中分得内存大小一样所以对象比较一样。b.equals(s)返回TRUE
但是b==s是比较栈中的b和s 分的内存的大小,呵呵b和s植不同所以在栈分的大小不同。所以返回FALSE
但是这句柄和对象在堆和栈中是怎么联系的?一直在考虑中
还有就是异常的重写,不要把该考虑的问都考虑问题在写啊
String s=new String ("abc");
String b=new String ("abc");
b.equals(s);这个结果是true ;
b==s 这个结果是false;
我是这么理解的,new 一下就产生一个对象是在放在堆中。
因为刚刚这2句话String s=new String ("abc");
String b=new String ("abc");调用是jdk api String 类的同一个构造函数所以在堆中分得内存大小一样所以对象比较一样。b.equals(s)返回TRUE
但是b==s是比较栈中的b和s 分的内存的大小,呵呵b和s植不同所以在栈分的大小不同。所以返回FALSE
但是这句柄和对象在堆和栈中是怎么联系的?一直在考虑中
还有就是异常的重写,不要把该考虑的问都考虑问题在写啊
b.equals(s)相当于比较"abc"和"abc"是不是相等的==是比较对象的HasCode,其实就是用来比较两个对象的引用是否一样;
String s=new String ("abc");
String b=new String ("abc");
s,b分别指向了两个对象,所以用==比较的结果肯定是false
如果是这样:String s=new String ("abc");String b=a;
那b==s 这个结果是true;
public boolean equals(Object o) {
return true;
}
哪怎样都是相等的.
String s=new String ("abc");String b=s;
我觉得是这样的 只不过把栈中地址指向b了。
是这样了吗?
你能给我讲讲 对象在复制过程中在堆中是如何处理的。
s 这个句柄是如何指向这个new String("abc");对象
大哥我比较水。麻烦了
大哥 你不是重写 这个方法了吗?
你怎么知道那是句柄就知道对应这个对象呢?
我觉得真的没什么关系,那只是数据在内存中的存贮位置罢了你能给我讲讲 对象在复制过程中在堆中是如何处理的。
s 这个句柄是如何指向这个new String("abc");对象
大哥我比较水。麻烦了
-----------------------------------------
句柄指向对象是通过Object类的hashCode()实现的,
如果两个所谓句柄如果指向的对象是一样的话他们的hashCode就是一样的
==比较也就是比较他们的hashCode
如果两个所谓句柄如果指向的对象是一样的话他们的hashCode就是一样的
==比较也就是比较他们的hashCode
-----------------------------------------------------------------------------------------
public class Text_object{
String s,b;
public Text_object(){
s=new String("test");
b=new String("test");
System.out.println(b==s);
System.out.println(b.equals(s));
System.out.println(b.hashcode());
System.out.println(s.hashcode());}
public Text_object(String t){
s=new String("test");
b=s;
System.out.println(t);
System.out.println(b==s);
System.out.println(b.equals(s));
System.out.println(b.hashcode());
System.out.println(s.hashcode());
}
public static void main(String args[]){
new Text_object("this is test a hashcod");
new Text_object();
}
}
大哥 我回去做了实验了,看了hashcode的文档。 如果 一个类的object相等hashcode值也一样,而你说的==是比较他们的hashcode是错误的。