(1)Java 基本数据类型:boolean,byte,short,char,int,float,double,long;
使用==进行比较时,若值相同,则返回true;
(2)Java 复合数据类型,使用==进行比较时,比较两个对象的内存地址是否相同,若相同,返回true;
使用equals比较,若未重写equals方法,默认比较对象的内存地址是否相同(等同于==);
Object类的equals方法:
(3)某些类重写了equals方法,比如String类
因此,当String对象使用equals方法时,比较的是值是否相同,而非引用;
()另外,String类有字符串缓冲池的机制;
示例:
此时打印出结果:true;
String a="hello";首先会在字符串缓冲池中寻找"hello"对象,若找到,则指向它;若未找到,则先在String pool中创建然后再指向它;因此a和b都指向字符串缓冲池中的同一个"hello"对象;
而此时打印结果:false;
原因;c指向了堆内存上的一个hello对象,而a指向字符串缓冲池上的hello对象;
此时打印结果:true;
intern()方法:返回一个引用,该引用指向字符串池中的一个与自己equals的对象;