根据常量池的定义来比较下面结果:
、
package Collection;
public class Constantpool {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="hello";
String s2="world";
String s3="hello";
String s4="he"+"llo";
String s5=new String("hello");
int int1=1224;
int int2=1224;
float float1=1224f;
System.out.println(s1==s3);
System.out.println(s1==s4);
System.out.println(s1==s2);
System.out.println(s1==s5);
System.out.println(s1.equals(s4));
System.out.println(s1.equals(s5));
System.out.println(int1==int2);
System.out.println(float1==int1);
System.out.println(s1.equals(s6));
/*
* true
true
false
false
true
true
true
true
false
*/
}
}
此时出现==与equals(),==判断要分对象来判断,如果是基本数据类型,且都是数值类型(byte,short,int,long,float,double)不论是那种,只要值相等即可。参照结果:System.out.println(float1==int1);
如果判断的是引用类型,equals()和==判断的结果标准都一样,比较两个两个引用类型的地址值。
但是String方法重写equasl()方法,只需要保证两个字符串字符序列相同,==需要比较地址值。
常量池中的字符地址值是相同的,但是如果你新new一个,那么就代表在内存中新看了一个地址。