Object的equals和==都是比较内存地址

String、Integer等类型重写了equals,比较的是值

String的==比较的是内存地址,String的equals比较的是值

但是,相同的字符串在内存中只创建一个,所以“String的==”比较“两个相同值的字符串”得到的结果仍是true

String a = "str";
String b = "str";
System.out.println(a == b); //true ,第二个"str"复用了第一个,内存中只有一个"str"

能否获取一个java对象的内存地址

在Java中,直接获取一个对象的内存地址是不可能的,因为Java的内存管理是由JVM进行的,并且为了实现跨平台的内存管理,JVM可以使用垃圾收集来管理内存,这就意味着对象的内存地址可能会变化