- package java131107;
- /*
- *
- * 对于字符串与非字符串来说,==与equals有什么区别?
- *
- * */
- public class Equals {
-
- public static void main(String[] args) {
- int ia = 3;
- int ib = 3;
- int ic = 5;
- String s1 = "string";
- String s2 = "string";
- String s3 = "String *********";
- String s4= new String("string");
- Can ca1 = new Can("Can 1");
- Can ca2 = new Can("Can 2");
- Can ca3 = new Can("can1");
- System.out.println("整数的对比********************");
- System.out.println("ia==ib " + (ia == ib)); // true 基本数据类型只比较值
- System.out.println("ia==ic " + (ia == ic)); // false 相等为真
- // 整数无equals法对比 System.out.println("ia equals ib "+(ia.equals(ib));
- System.out.println("字符串的对比********************");
- System.out.println("s1==s2 " + (s1 == s2)); //true 对引用型数据比较地址值 同一个内地址
- System.out.println("s1==s3 " + (s1 == s3)); //false 不同的地址
- System.out.println("s1==s4 " + (s1 == s4)); //false 不同的内存地址
- System.out.println("s1 equals s2 " + s1.equals(s2)); //true 内容相同
- System.out.println("s1 equals s3 " + s1.equals(s3)); //false 同容不同
- System.out.println("s1 equals s4 " + s1.equals(s4)); //true 内容不同
-
-
-
- System.out.println("类对象的对比********************");
- System.out.println("ca1==ca2 " + (ca1 == ca2)); //false 地址不同
- System.out.println("ca1 equals ca2 " + ca1.equals(ca2));//false 地址不同
- System.out.println("ca1==ca2 " + (ca1.equals(ca2))); //false 地址不同
- System.out.println("ca1 equals ca3 " + ca1.equals(ca2)); //false 地址不同
- ca1 = ca2;// 把 c2的引用给了才c1;
- System.out.println("ca1==ca2 " + (ca1 == ca2)); //true 同一个对象,相同
- System.out.println("ca1 equals ca2 " + (ca1.equals(ca2))); //true 同一个对象
- }
-
- }
- class Can{ //定义一个类
- String s;
- public Can(String classname) {
- this.s=classname;
- System.out.println("类ca****"+classname);
- }
- <font size="4">}</font>
复制代码 结论:
==:
1对于基本数据类型比较的是值的大小,
2 对于引用数据类型比较的是内存地址
equals()方法:
1 是一个方法,所以不用于基本数据类型的比较
2equals()比较的是引用数对象(包括类和数组等)的地址值,但是String类重写了equals()方法,所以比较的是内容
3对于没有重写equals()方法的类,比较的仍是 地址值
|