• 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也是深复制。

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

  • 相关阅读:
    html5shiv.js-让IE浏览器支持HTML5标准
    CSS2系列:外边距合并问题(margincollapse)
    HTML5:离线存储(缓存机制)-IndexDB
    CSS3系列:流式(弹性)布局(flex布局)
    Sublime Text 3 常用插件以及安装方法(转)
    后台配置参数写在文件上
    20160414
    2016413
    20160412
    网页设计素材网站
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5295616.html
Copyright © 2020-2023  润新知