hashmap的key值和value值是强引用,意味着hashmap对象不被销毁的时候,里面的键值对是不会被销毁的,然而weakhashmap的话,当里面的键值对没有被销毁的时候的话可能被Java回收机制自动销毁
WeakHashMap whm=new WeakHashMap<>();
whm.put(new String("php"), "75元");
whm.put(new String("java"), "90元");
System.gc();
System.runFinalization();
System.out.println(whm);
HashMap whm1=new HashMap();
whm1.put(new String("php"), "75元");
whm1.put(new String("java"), "90元");
//强制系统进行垃圾回收
System.gc();
System.runFinalization();
System.out.println(whm1);
{}
{php=75元, java=90元}
Java中判断两个变量是否相等有两种方式:一种是利用==运算符,另一种是利用equals方法。如果变量是基本类型,那么使用==和使用equals会得到相同的结果,都是判断变量的值是否相对。如果变量是引用类型,==运算符判断变量是否指向同一引用对象,equals判断变量"值"是否相等。Java值类型对应的包装类(Boolean、Byte、Short、Integer、Long、Float、Double、Charcater)可以利用==运算符进行值判断。
- int inta = 65;
- float floata = 65.0f;
- Integer intb = 65;
- Float floatb = 65.0f;
- //inta == floata根据值判断,结果是true
- System.out.println("inta == floata:" + (inta == floata));
- //inta == intb根据值判断,结果是true
- System.out.println("inta == intb:" + (inta == intb));
- //inta == floatb根据值判断,结果是true
- System.out.println("inta == floatb:" + (inta == floatb));
- String stra = "测试";
- String strb = new String("测试");
- String strc = new String("测试");
- String strd = "测试";
- //stra和strb指向不同的对象,结果是false
- System.out.println("stra == strb:" + (stra == strb));
- //stra和strd指向同一个对象,结果是true
- System.out.println("stra == strd:" + (stra == strd));
- //strb和strc指向不同的对象,结果是false
- System.out.println("strb == strc:" + (strb == strc));
- //strb和strc的值一样,结果是true
- System.out.println("strb equals strc:" + (strb.equals(strc)));
- //stra和strb的值一样,结果是true
- System.out.println("stra equals strb:" + (stra.equals(strb)));