欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中==等于符的方方面面

程序员文章站 2022-03-01 19:49:39
...

    在java中,一般都会说基本类型的比较相等用==这个比较符;对于引用类型的比较相等一般用equals方法,自定义的类型需要实现equals方法,如果用==则会比较两个对象的地址是否一样。

    今天有点时间,就写了个测试,记录==到底是怎么样的。以下是demo代码:

 

public class Typea {

	public static void main(String[] args) {
		
		Integer x = 1;
		Integer y = 1;
		System.out.println(x == y);// 1. true
		
		Integer v = 128;
		Integer w = 128;
		System.out.println(v == w);// 2. false
		
		Integer m = 128;
		int n = 128;
		System.out.println(m == n);// 3. true
		
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		System.out.println(i == j);// 4. false
		
		String str1 = "abcgggggggggggggggggggggggggggggedgert";
		String str2 = "abcgggggggggggggggggggggggggggggedgert";
		System.out.println(str1 == str2);// 5. true
		
		String str3 = new String("abcgggggggggggggggggggggggggggggedgert");
		String str4 = new String("abcgggggggggggggggggggggggggggggedgert");
		System.out.println(str3 == str4);// 6. false
	}
	
}

 

 

这个结果有时候相等,有时候又不相等,到底是为什么?总结起来,只有两个引用指向的是同一个对象才会返回true,否则返回false。new的出来的肯定是两个对象,肯定返回false。

 

需要注意的就是:对于直接赋值的时候,Integer有缓存,在[-128,127]之间的数字全部缓存,所以第一个返回true,第二个返回false;String有一个常量池,直接赋值会从常量池找,找不到就创建一个放到常量池,找得到就找得到,所有第五个返回true。