java == 比较的是什么?
Object的hashCode()默认是返回内存地址的,但是hashCode()可以重写,所以hashCode()不能代表内存地址的不同。
System.identityHashCode(Object)方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法
对于对象,比较的是对象的内存地址
对于基本类型数据,其实比较的是它的值。
package zhengze; import javax.swing.tree.TreeNode; import java.lang.reflect.Field; import java.util.*; import java.util.function.Supplier; public class IntegerTest extends Object{ public static void main(String[] args) { String s = new String("OK"); String z = new String("OK"); String a = "OK"; String b = "OK"; System.out.println(System.identityHashCode(s)); System.out.println(System.identityHashCode(a)); System.out.println(System.identityHashCode(b)); System.out.println(System.identityHashCode(z)); int a1 = 12; int b1 = 12; System.out.println(System.identityHashCode(a1)); System.out.println(System.identityHashCode(b1)); int a2 = 256; int a3 = 256; System.out.println(System.identityHashCode(a2)); System.out.println(System.identityHashCode(a3)); System.out.println(a2 == a3); //基本类型,地址不一样,输出true Integer a4 = 126; Integer a5 = 126; System.out.println(System.identityHashCode(a4)); System.out.println(System.identityHashCode(a5)); System.out.println(a4 == a5); //包装类,小于127,true a4 = 256; a5 = 256; System.out.println(System.identityHashCode(a4)); System.out.println(System.identityHashCode(a5)); System.out.println(a4 == a5); //大于127,false; //对于Integer对象来说,常量区存储了(-128~127),超过范围则存储到堆内存中 } }
诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。