Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IdentityHashMap v get(key)方法在以下情况下如何工作_Java_Collections_Concurrency - Fatal编程技术网

Java IdentityHashMap v get(key)方法在以下情况下如何工作

Java IdentityHashMap v get(key)方法在以下情况下如何工作,java,collections,concurrency,Java,Collections,Concurrency,从以下文件的javadoc: 此类使用哈希表实现映射接口,使用 比较键时引用相等,而不是对象相等 (和价值观)。换句话说,在IdentityHashMap中,两个键k1和 k2被认为是相等的当且仅当(k1==k2)。(在法线贴图中) 实现(如HashMap)两个键k1和k2被认为是相等的 当且仅当(k1==null?k2==null:k1.equals(k2))) 所以,如果您尝试使用插入值的同一个键引用检索值,您将获得该值。但是,如果您尝试使用差分键引用获取值(即使它相等),您将得到空值。对于

从以下文件的javadoc:

此类使用哈希表实现映射接口,使用 比较键时引用相等,而不是对象相等 (和价值观)。换句话说,在IdentityHashMap中,两个键k1和 k2被认为是相等的当且仅当(k1==k2)。(在法线贴图中) 实现(如HashMap)两个键k1和k2被认为是相等的 当且仅当(k1==null?k2==null:k1.equals(k2)))


所以,如果您尝试使用插入值的同一个键引用检索值,您将获得该值。但是,如果您尝试使用差分键引用获取值(即使它相等),您将得到空值。

对于IdentityHashMap使用“==”运算符比较键,而在HashMap中则使用equals()进行比较。 当您创建一个新字符串(“键”)时,它总是在中创建一个新对象

堆内存

。另一方面,如果您使用字符串文字语法(例如“key”)创建对象,它可能会从

串池

或者在池中创建一个。
因此,使用equals()时,两者都与比较内容相同,但“==”将比较两种情况下不同的引用(因此,如果使用IdentityHashMap,则无法获取对象)

欢迎来到堆栈溢出。请花些时间重新格式化您的代码-使用预览检查它是否以您期望的方式显示-并将您的描述置于代码之外。您期望的是什么<代码>新字符串(“identityKey”)!=“identityKey”。
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;


public class IdentityHashMapExample {
    public static void main(String args[]){

        // Created HashMap and IdentityHashMap objects
        Map hashmapObject = new HashMap();

        Map identityObject = new IdentityHashMap();

        // Putting  keys and values in HashMap and IdentityHashMap Object

        hashmapObject.put(new String("key") ,"Google"); 

        hashmapObject.put(new String("key") ,"Facebook"); 

        identityObject.put(new String("identityKey") ,"Google"); 

        identityObject.put(new String("identityKey") ,"Facebook"); 
        // Print HashMap and IdentityHashMap Size : After adding  keys

        System.out.println("HashMap after adding key :"+ hashmapObject);
        System.out.println("Getting value from HashMap :"+ hashmapObject.get("key"));

        System.out.println("IdentityHashMap after adding key :"+ identityObject);
        // why get(key) method return the null value in case of identityHash Map 

        System.out.println("Getting value from IdentityHashMap :" + identityObject.get("identityKey"));
    }
}