zoukankan      html  css  js  c++  java
  • java泛型中的对象

    import java.util.HashMap;
    class Key {
    	String s;
    	Key(String s) {
    		this.s = new String(s);
    	}
    	@Override
    	public boolean equals(Object obj) {
    		if (obj instanceof Key) {
    			if (s.equals(((Key) obj).s)) {
    				return true;
    			}
    		}
    		return false;
    	}
    	@Override
    	public int hashCode() {
    		return s.hashCode();
    	}
    	@Override
    	public String toString() {
    		return s;
    	}
    }
    class Value {
    	String s;
    	Value(String s) {
    		this.s = new String(s);
    	}
    	@Override
    	public String toString() {
    		return s;
    	}
    }
    public class Main {
    	public static void main(String[] args) {
    		HashMap<String, String> a = new HashMap<>();
    		String usr = "weidiao", password = "20124003";
    		a.put(usr, password);
    		usr = "haha";
    		System.out.println(a.get(usr));
    		password = "haha";
    		System.out.println(a.get("weidiao"));
    
    		HashMap<Key, Value> b = new HashMap<>();
    		Key k = new Key("weidiao");
    		Value v = new Value("20124003");
    		b.put(k, v);
    		k.s = "haha";
    		for (Key i : b.keySet()) {
    			System.out.println(i + " : " + b.get(i));
    		}
    	}
    }
    
    输出为:
    null
    20124003
    haha : null
    

     

    在这个问题中,改变了Key的值,就再也找不到“20124003”了,因为没有“weidiao”这个key了已经。而根据新key “haha”定位到的value为null。

    如果为String类型,那就是深复制,就相当于复制了完完全全的一份,就相当于C++中的结构体复制。

    如果为其他引用类型的数据,那就会浅复制,只复制了指针。
    如果为基本数据类型,那就是深复制,String也是深复制。

    如果为自定义类型,那就是浅复制。

  • 相关阅读:
    POJ2253 Frogger
    搜索专题(复习)
    机器学习资料整理
    51nod 1873 初中的算术
    Canny检测理解和Matlab实现
    Floyd+限制路径步数(快速幂优化)
    bitset优化背包问题
    Educational Codeforces Round 44 (Rated for Div. 2)
    BZOJ 3224 SBT 普通平衡树
    本科课程大数据基础
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5295616.html
Copyright © 2011-2022 走看看