java中 HashCode到底是什么?

hashCode是万物的十六进制地址.(这里引用编程思想一句话 "万物都是对象").

hashCode既然是万物的地址.那么我在新建的一个类里 重写Object的hashCode方法
equals方法,依然返回false.
class A{
public int hashCode(){
return 1;
}
public boolean equals(Object obj){
return true;
}
}
public class Test{
public static void main(String[]args){
A a1=new A();
A a2=new A();
output(a1==a2);--->false
output(a1.equals(a2));-->true
}
}

求大师解惑

8个回答

==比较的是对象的内存地址
System.identityHashCode(Object obj)会返回obj的精确hash值,根据obj的内存地址计算得到。

不知道楼主有没有了解过数据结构中的哈希表,Object类中hashCode方法的实现就是哈希函数,而你的覆写return 1也是哈希函数。
hashCode的返回值所映射到的地址如果已经有了值(即hashCode方法返回值相同,Object类中hashCode方法的返回值也有可能有相同的),就会通过‘开发地址法’或‘链地址法’
去找下一个没有存放值的地址空间。java中==比较的是地址是否相同,而不同对象的地址肯定是不同的(尽管hashCode相同)。

首先 == 比较的是内存地址,我在上面已经写的非常清楚,既然hashCode是内存地址!
我都重写了hashCode返回值了.为什么还是报错

cuiwenb
NE丶Passion 回复我的名字叫徐帆: 那他调用的是什么?
大约 2 年之前 回复
qq_35728177
Tsui丶 因为 == 并不调用hashcode方法
大约 2 年之前 回复

==比较的是等式两边的地址,

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

hashcode是java对对象的一个标识,,便于实现,,Hashtable,HashMap等,,

不是唯一标识,,知识一种标识(可以存在hash冲突)

你的equals方法不是返回的 true吗? ==比较的是内存地址, a1 a2是new出来的两个对象他们的内存地址当然是不同的,所以返回false

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java的HashCode到底怎么用的。
比如代码这样.rnint[] A = 1,2,3,4; rnSystem.out.println(A.hashCode()); rnrnprint出来的是什么呢?谢谢了,刚才看另外一个贴,hashcode没用过不懂。rn
javaWeb开发中 / 到底是什么?
一. 当前WEB 应用的根路径:http://localhost:8080/contextPath/ : 若 / 需交由 servlet 容器来处理: 1)请求转发时: `request.getRequestDispatcher("/path/a.jsp").forward(request,response)` 2)web.xml 文件中映射servlet 访问路径: <...
java中锁到底是什么?
java中锁到底是什么?谁能清晰明了的解答呢?先谢谢了。
hashCode是什么?
同题
Java中对象的hashcode是什么东西?
Java中对象的hashcode是什么东西?是不是在内存中的某个标志?
java到底是什么?
我想用jsp开发应用程序,jsp属于java?java到底是什么?与javascript有什么关系?与j2ee有什么关系?开发jsp用什么工具?jbuilder是干嘛的?jsp需要编译吗?rn安全性如何?
JAVA的多态到底是什么??
class Arnrn void fun(int a)...rn void fun(int a,int b)....rnrn这样算多态吗???
JAVA Beans到底是什么?
请问大家对JAVA Beans的理解,是一种技术,还是一个类包,还是。。。。我的理解是对GUI设计的一种组件?对吗?
java线程池到底是什么
java线程池是: 提前创建好的对象,当我们直行任务时,若有空闲线程,直接调用线程池中线程执行任务,省去线程的创建销毁时间,典型的空间换时间,真正的原理.(提前创建好的对象)...
java中controller中到底写的是什么?
网上很多都说,controller中写校验,转发,不要写逻辑。这个逻辑的定义到底是个啥鬼?rn举例说,我现在有个业务较为复杂的场景,我把所有的业务逻辑都写到service?一个大大的service?又比如说,我之前就有写好的一个service,比较简单的业务逻辑,这次我需要开发的新接口中需要这个service的数据,但是不止,我当然要复用这个service是吧,这时候我就要在controller中调用几个service,然而组合service的这部分逻辑算不算逻辑?这样controller中就不只是校验和转发了,当小的service一多,这个怎么能不算业务逻辑,就又回去了。再者,service中调用service,我们最终调用一个最外层的service?这样controller就不用管了service的关系了,但是更不合理了。所以,求个大神解释解释
Java中的hashcode方法
1. 什么是hashcode方法? 在java中hashcode方法是Object类的native方法,返回值为int类型,根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。 2. hashcode方法的作用 在java中hashcode是用于快速查找对象物理存储区使用的,主要作用于散列集合(HashSet,HashMap,HashTa...
Java中hashCode的作用
hashCode的作用 java.lnag.Object中对hashCode的约定: 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 如果根据 equals(Object) 方法,两个对象是相等的,那
Java中hashCode的作用(三文读懂hashcode)
http://blog.csdn.net/fenglibing/article/details/8905007 http://blog.csdn.net/zhangyuan19880606/article/details/51240372 http://blog.csdn.net/baidu_31657889/article/details/52298367
浅谈类中的hash code() 和 equals(Object obj)方法
浅谈Java中的hashcode方法   哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 1 public native int hashCode();   根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类...
Java中hashCode的计算
1.String  public static void main(String args[]) { String s1="hello"; String s2=new String("hello"); System.out.println(s1.hashCode());//99162322 System.out.println(s2.hashCode());//99162322
java中hashcode的作用
其实hashcode就是一个对象的身份证号,但是它是允许重复的。你可以这样理解,每个对象都需要一个身份标识,来区分它和其他的对象不同,但是由于一些限制因素(下面的斜体解释了它),我们不可能实现每一个对象都有一个唯一的标识,而是使用了一个叫做hashcode的编号。
java中的hashcode
实际上,hashcode根本不能代表object的内存地址。
浅谈Java中的hashcode
一、hashcode是什么? 1、hash和hash表是什么? Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息...
JAVA 中Null值到底是什么
public class test rn public static void main(String[] args) throws Exception rn Temp temp = new Temp();rn temp.test("1");rn temp.test(null);rn rnrnrnpublic class Temp rn public void test(Object a)rn System.out.println("test Object");rn rn public void test(String a)rn System.out.println("test string");rn rnrnrn为什么输出结果为rntest Objectrntest Object
main函数在java中的具体作用到底是什么
RT
Java中 synchronized到底锁住的是什么?
Java中 synchronized到底锁住的是什么? 使用环境:多线程java程序中。 作用:在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。 使用:synchronized锁住的是括号里的对象,而不是代码。对于非static的synchronized方法,锁的就是对象本身也就是this。 通过以下三个案例...
Java 中常说的常量池到底是什么
常量池的划分 Class 文件常量池 运行时常量池 字符串常量池 1. Class 文件常量池 Class 文件常量池指的是编译生成的 class 字节码文件,其结构中有一项是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。 什么是字面量和符号引用? 字面量是指字符串字面量和声明为 final ...
Java中getContentPane()返回的到底是什么类型?
Java中getContentPane()返回的到底是什么类型?rnrn反正不是Container,应该是他的子类才对,但是什么类型呢?
重载hashCode是什么?
equals的重载,是对“等于”号而言。rn可hashCode的重载,是用来作什么用的?rnrn[code=Java]public class chessPoint rn public chessPoint(int x, int y) rn m_x = x;rn m_y = y;rn rn rn public int getX() rn return m_x;rn rnrn public chessPoint setX(int x) rn m_x = x;rn return this;rn rnrn public int getY() rn return m_y;rn rnrn public chessPoint setY(int y) rn m_y = y;rn return this;rn rn rn @Overridern public int hashCode() rn return m_x + m_y;rn rnrn @Overridern public boolean equals(Object obj) rn if (this == obj) rn return true;rn rn rn chessPoint other = (chessPoint)obj;rn if (m_x != other.m_x) rn return false;rn rn rn if (m_y != other.m_y) rn return false;rn rn rn return true;rn rn rn private int m_x;rn private int m_y;rn[/code]
equals()和hashCode()是什么关系?
重写了hashCode()方法,还用重写equals()吗?rn那equals()不就是比较两个对象的hashCode()吗?
一个对象的hashcode Key是什么
最近一直在看hashcode 方面的文章,但有个疑问,一个对象的hashcode 是依据什么计算出来的?(注:我不是说的hashcode的计算公式哈)rn例如在定义一个对象 String test = "123",在调用 test.hashCode() 时,debug进去看到他的hashcode key 是 “123” ,对 123 进行公式套用rn但如果一个是新对象,对他取hashcode 时,他取的hashcode key 是什么?rnrn代码如下:rn[code=java]rnpublic class Test rnrn public static void main(String[] args) rn Test test = new Test();rn int hashValue = test.hashCode();rn System.out.println(" hashValue = " + hashValue);rn rnrnrn[/code]rnrn这段代码,我debug不了,到hashcode 直接过了
java枚举到底是什么鬼?
枚举类型是什么呢,其实是指一组固定的常量组成合法值的类型。
java synchronized到底锁住的是什么
刚学java的时候,只知道synchronized一个线程锁,能够锁住代码,但是它真的能像我想的那样,能够锁住代码吗? 在讨论之前先看一下项目中常见关于synchronized的用法: public synchronized void syncCurrentObject() { System.out.println(Thread.currentThread().ge
弄懂java中”==“、”equals“、”hashcode“
最近在读《Effective Java》里面有很著名的一个重写equals和hashcode的论断。并介绍了重写的原则。今天我来说一下面试题中经常出现但是我们一般理解不够深刻的”=“、”equals“、”hsahcode“区别和联系。
java中“==”、equals和hashCode的区别
1.“==”运算符是用来比较两个变量的值是否相等。也就是比较变量对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用类型变量是否相等只能使用“==”来比较。 如果变量是基本数据类型,那么可直接用“==”比较。 例: String s = "hello"; String t = "hello"; s==t; 返回的是true。 如果变量是 指向数据的对象(引用类型),那...
Java中equals,hashcode和==的区别
本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
浅谈Java中的hashcode方法
在Java的Object类中有一个方法:public native int hashCode();一.hashCode方法的作用对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。也许大多数人都会想到调用equals方法来逐
java中hashcode()和equals()和==的详解
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?
Java中的HashCode相关说明
Equals与HashCode: 1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的; 2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同; 3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且...
Java中equals和hashcode方法重写
在Java中需要比较两个对象时,通常需要重写equals方法和hashcode方法。package com.gds.ai;public class Student { private String address; private String name; private int age; public String getAddress() { re
(基础)java中的equals与hashcode
hashCode()用于计算该对象的哈希值,当以哈希表为底层数据结构存储数据时,就需要用到哈希值,如HashSet,HashMap等集合容器。   hashCode() 与 equals() 为什么要一起重写呢? 通常,是基于这样的考虑: 如果该对象使用哈希表的进行存储,那么需要通过hashCode()计算哈希码,得到对象的地址,当地址相同时,就需要进一步调用该对象的equals()来比...
java中的equals与“==”、hashcode的区别
"=="操作符的作用 判断引用是否指向堆内存的同一块地址。 如果是原始类型,byte,boolean,short,char,int,long,float,double,就是直接比较他们的值。 如果是引用,比较的就是引用的值,引用的值可以被认为是对象的逻辑地址,如果两个引用发生==操作,就是比较两个相应的对象的地址值是否一样,换句话说,如果两个引用保存的是同一个对象,则返回true,否则返回f...
Java 中可变hashcode的隐患
为识别对象,JDK为每个Object类都定义了一个hashcode,Object的类的hashcode是根据对象的内存地址做hash算法得出来的,String类则自己重写了hashcode()方法,是根据字符串的每个字符做算法累加起来的,Integer在直接返回value的值。    而很多时候,对于应用系统的一些类(Java Bean),是要根据属性来计算hashcode而非内存地址,就像Str...
this到底是什么?
1.参考书籍 <你不知道的JavaScipt> ,<第一行代码Java> 在javaScript中是采用的静态作用域,就是当 , 一个函数出生,他的作用域链就已经确定的了; this 采用的是 动态作用域 , 弥补静态作用域的缺陷,具体指什么 , 由函数调用的位置决定; 在javaScript中this 指定的函数调用上下文,即某个对象, ...
java中的==、equals()、hashCode()源码分析
1. ==    java中的==是比较两个对象在JVM中的地址。比较好理解。看下面的代码: public class ComAddr{ public static void main(String[] args) throws Exception { String s1 = "nihao"; String s2 = "nihao";
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview