根据常量池的定义来比较下面结果:

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一个,那么就代表在内存中新看了一个地址。