如果你判断两个对象引用是否指向同一个对象用== 如果你判断两个对象的内容是否相同,用equals =是赋值语句如 Class A;A a1 = new A("1"); A a2 = new A("1"); A a3 = a1; // 赋值 a1 == a3 a1 != a2 a1.equals(a2) is true
其实这个和你要比较的东西有关系,Java中基础类型的是传值的,其他的都是引用. "=="是比较值,".equals"是对所引用的对象的值的比较. 所有基础类型可以用"=="比较,而比较对象时,"=="是比较两个对象的引用,应该就是内存的地址 所以 String str1 = new String("1"); String str2 = new String("1"); "str1==str2"是false str1.equals(str2)是true
java 在内存中存放数据的空间类型分为两种,静态存储区和共享存储区,经过static关键字声明的对象数值型常量以及JVM需要的类资源会被存放于静态存储区,这样可以保证在程序运行过程中数据的唯一性,而其他在程序中被动态创建的对象则被存放在共享存储区. ==是以地址引用方式来比较两个同类型的变量是否引用同一内存地址的对象,简单的说就是用来比较两个对象是否是同一个对象,通常用于比较存放于静态存储区中的对象,比如数值比较int i = 1; int j = 1; if (i == j) { System.out.println("Good Luck!"); } 上面的声明的变量i,j实际上是共同建立了一个与静态存储区中存放数值1的地址的引用,所以用==进行比较是正确的。 而equals()方法是以对象引用的方式来比较两个对象的内容是否一致.比如: Integer i = new Integer(1); Integer j = new Integer(1); if (i.equals(j)) { System.out.println("Good Luck!"); } 上面生成的i,j是分别被创建并放到共享内存区的对象,如果用==来对它们进行比较则永远不会返回true,因为在对象创建时,JVM会在共享区分别为它们分配独立的内存,虽然形式一样但它们不是同一个对象,所以此时用equals()方法是正确的,在程序开发中这个方法用于字符串比较用的比较多。=顾名思义就是用来付值用的。
我的做法是:值类型(整、浮点、布尔)用"=="
其他的用.equals()
不使用"=",这是赋值。
如果你判断两个对象的内容是否相同,用equals
=是赋值语句如
Class A;A a1 = new A("1");
A a2 = new A("1");
A a3 = a1; // 赋值
a1 == a3
a1 != a2
a1.equals(a2) is true
其他的一概用equals,除非你想判断是不是同一个对象时用"=="(一般很少用,自认为!!)"="是附值,
其次说"==",基本数据类型(不包括String)可用这个表达式来判断两个数据是否相等,如果用两个对象名来执行==,例如String s1="a",String s2="b",那么s1==s2返回的是假,不是真,因为==比较的是两个对象的引用是否相等,可以理解为比较两个指针本身的值是否相等,而不是指向的内容是否相等
如果需要判断内容是否相等就得用equals方法了(只用于对象,不用于基本数据类型),上面的s1,s2判等可用s1.equals(s2),这样返回的就是true了,当然这只是针对String来说的,其equals方法可以在你的类中被重写,也就是你自己定义一个规则来判断两个对象是否相等
equals判断两个对象的内容是否相同
=是赋值语句
equals 比较的是 value
判断两个数是否相等用"=="
判断两个对象是否相等用".equals"
复杂类型(对象类型,如Integer、Char、String等)一定要用“.equal”,这是因为如果用“==”,则比较的是对象所指的地址(在java中地址对程序员是透明的,但任何语言,包括java在底层都是通过地址来引用对象实例的),而不是对象的值。一般情况下,每一个复杂类型都有一个简单对象和其对应,如Integer对应int,Char对应char。而equal方法的作用就是比较Integer类中的int类型。因此,要用equal。“=”和“==”、“equal”没关系。是赋值号。如a=b;将b的值赋给a。不要写错了啊。“==”一般在C或C++中最好要这样写if(4==a) statement; 而if(a==4)容易写成if(a=4)。如果写成if(4=a)就会报错。
但在java中只有一种情况可能出现这种写错的情况。
boolean a = false;
if(a==true) System.out.println("ab");
和
boolean a = false;
if(a=true) System.out.println("ab");
String s1=new String("123");
(s1==s1) false
(s1.equals s2) trueString s="123";
String s1="123";
(s1==s2) true
(s1.equals s2) true
a=b就是将b的值给了a其实不是将里面的内容给了过去。而是将a在内存中的地址转到了b上面。
从而得到值都是相等的。
如果你生成 一个对象的话。如
Integer a =2;
double b = 2.000;
if(a.equals(b)){
System.out.println("相等");
}
if(a == b){
System.out.println("不相等");
}
他们的地址可能不一样。但是他们的值是一样的,你去测试这段话你就能得到你想要的答案了。
eques是比较内存中地址的内容的。如果不同的地址可以比较就如上面的。
判断值之间相不相等用 ==
判断对象之间相不相等用 equals
赋值用 =
其他的楼上都说得很详细了~
什么时候用“=”//这是一个赋值语句,没有比较的含义
什么时候用“.equals()”//内容比较,比方说你和你的双胞胎哥哥,张的一样,穿的一样,吃的一样,一个爸,一个妈,ok equals 没问题,== 不行
=是赋值
对象类型,==表示两个对象相同,也就是地址相同;equals()方法多用于比较字符串的值是否相等,对于其他对象,多是比较内容,但是该函数是可以复写的
-------------------------------------问题二:"=="和equals方法究竟有什么区别?
"=="是比较值,".equals"是对所引用的对象的值的比较.
所有基础类型可以用"=="比较,而比较对象时,"=="是比较两个对象的引用,应该就是内存的地址
所以 String str1 = new String("1");
String str2 = new String("1");
"str1==str2"是false
str1.equals(str2)是true
==是以地址引用方式来比较两个同类型的变量是否引用同一内存地址的对象,简单的说就是用来比较两个对象是否是同一个对象,通常用于比较存放于静态存储区中的对象,比如数值比较int i = 1;
int j = 1;
if (i == j) {
System.out.println("Good Luck!");
}
上面的声明的变量i,j实际上是共同建立了一个与静态存储区中存放数值1的地址的引用,所以用==进行比较是正确的。
而equals()方法是以对象引用的方式来比较两个对象的内容是否一致.比如:
Integer i = new Integer(1);
Integer j = new Integer(1);
if (i.equals(j)) {
System.out.println("Good Luck!");
}
上面生成的i,j是分别被创建并放到共享内存区的对象,如果用==来对它们进行比较则永远不会返回true,因为在对象创建时,JVM会在共享区分别为它们分配独立的内存,虽然形式一样但它们不是同一个对象,所以此时用equals()方法是正确的,在程序开发中这个方法用于字符串比较用的比较多。=顾名思义就是用来付值用的。