.equals()到底是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.equals()到底是啥意思?相关的知识,希望对你有一定的参考价值。
26.下面java代码执行后,输出结果是(c)(选择一项)
Boolean b1=new Boolean(true);
Boolean b2=new Boolean(true);
if(b1= =b2)
if(b1.equals(b2))
System.out.println(“a”);
else
System.out.println(“b”);
else
if(b1.equals(b2))
System.out.println(“c”);
else
System.out.println(“d”);
a) a
b) b
c) c
d) d
.equals() 在Java中判断是否相等,与 == 的区别是 .equals() 只判断值是否相等,不管两者是否存在同一地址。而 == 则是判断值与存在地址都得相等
扩展资料:
由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。
另外,"=="比"equals"运行速度快,因为"=="只是比较引用。
参考技术A 1.equals的本意——即在Object对象中定义的equals()方法有什么样的意义。(此处先附上==的作用,后面仍有叙述。因为==和equals()方法的关系是很密切的,后面有我自己的看法。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true)
public boolean equals(Object obj)
其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.
public class Fish
private int weight;
private String color;
public Fish(int weight, String color)
this.color = color;
this.weight = weight;
public int getWeight()
return weight;
public void setWeight(int weight)
this.weight = weight;
public String getColor()
return color;
public void setColor(String color)
this.color = color;
public class EqualsTest
public static void main(String[] args)
Fish f1 = new Fish(1, "blue");
Fish f2 = new Fish(1, "blue");
System.out.println(f1 == f2);
System.out.println(f1.equals(f2));
——————运行结果为——————
false
false
由此可见,equals()方法的本意为确定两个对象的引用是否相同。
2.而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
public class EqualsTest
public static void main(String[] args)
String s1=new String("sss");
String s2=new String("sss");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
————————运行结果为——————
false
true
由此知道,在String中equals()方法被进行了覆盖,使其意义变为比较两个对象的内容是否一致
3.如果我们要自己覆盖equals()方法,让其比较内容或者有别的使用方法(当然我们一般都是用于比较内容的,但是覆盖的方法中真正的实现究竟是什么样的,谁知道呢O(∩_∩)O~)
public class Fish
private int weight;
private String color;
public Fish(int weight, String color)
this.color = color;
this.weight = weight;
@Override
public int hashCode()
final int prime = 31;
int result = 1;
result = prime * result + ((color == null) ? 0 : color.hashCode());
result = prime * result + weight;
return result;
@Override
public boolean equals(Object obj)
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fish other = (Fish) obj;
if (color == null)
if (other.color != null)
return false;
else if (!color.equals(other.color))
return false;
if (weight != other.weight)
return false;
return true;
public int getWeight()
return weight;
public void setWeight(int weight)
this.weight = weight;
public String getColor()
return color;
public void setColor(String color)
this.color = color;
public class EqualsTest
public static void main(String[] args)
Fish f1 = new Fish(1, "blue");
Fish f2 = new Fish(1, "blue");
System.out.println(f1 == f2);
System.out.println(f1.equals(f2));
——————运行结果为——————
false
true
此例子中我复写了equals()方法和hashcode()方法,使得equals()方法脱离的本意,不再是比较两个对象的引用是否相同,而是比较其内容是否相同。
以上内容为一般书上的总结,下面是我自己想到的一些东西。
我们可以知道计算机归根到底进行的只是一些二进制数的与或非运算,加法乘法运算。由此有了些基本的运算符,所有的函数本质上其实现都是使用基本运算符来实现的。而==是基本运算符中的一个,它的作用:用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
而equals()作为方法,我们可以推测知道,它其中的实现所使用的肯定是==运算符。再进一步的思考,equals()本意不正是==运算符进行对象比较时候的作用吗。那么,既然是两者有同样的作用,为什么还要弄出一个equals()方法来呢。因为==运算符不允许我们进行覆盖,也就是说它限制了我们的表达。在上面的第三个例子中,我们复写equals()方法,达到比较对象内容是否相同的目的。而这些通过==运算符是做不到的。 参考技术B 1.==比较的是地址
2.至于为啥比较的是地址?不是内容。这个是JAVA规定的,不是我们可以控制的
3.说equals比较的是值是完全不对的。要看他是否有重写object的equals方法。如果没有,他比较的肯定是也地址。如果有,那么很有可能他比较的是值,但也不尽然 。可以看他的源码。比如Integer a=1.Doubleb=1;a.equals(b)那肯定是false。因为他在重写时还判断了类型本回答被提问者采纳 参考技术C if(b1==b2)是比较b1跟b2的地址,那当然是不同的咯,所以执行else,然后if(b1.equals(b2))是比较b1与b2的值,它们两个的值都 是true。。相等是吧,所以输出C,,呵呵 ,现在理解了吗?追问
为啥比较的是地址?不是内容?
追答呵呵 ,,这个是JAVA规定的啊,不过楼下的比我的解释更清楚,你现在可能是刚刚接触equals,等你往后面学自然就会懂的,呵呵 ,加油!
追问thank you ~么~
参考技术D 您好,在Java以及C#语言中,这个方法都用于判断两个值是否相等。a.equals("b"),java中常用语判断字符串的值是否一致。*NSFileProtectionComplete* 到底是啥意思?
【中文标题】*NSFileProtectionComplete* 到底是啥意思?【英文标题】:What exactly does *NSFileProtectionComplete* mean?*NSFileProtectionComplete* 到底是什么意思? 【发布时间】:2016-02-17 10:33:44 【问题描述】:我正在查看NSFileManager 类参考,我对NSFileProtectionComplete
的含义有些困惑。这是类参考所说的:
文件以加密格式存储在磁盘上,无法读取 在设备锁定或启动时从或写入。
这是否意味着文件以加密格式存储在磁盘上总是...无论设备是否设置了密码(或类似的安全机制)?
【问题讨论】:
【参考方案1】:完全保护
(NSFileProtectionComplete):类密钥受用户密码和设备 UID 派生的密钥保护。用户锁定设备后不久(“请求密码”>“就绪”10秒后),解密的类密钥被丢弃,这样该类的所有数据都无法访问,直到用户再次输入密码或解锁带有触控 ID 的设备。
问:德语https://www.apple.com/de/business/docs/iOS_Security_Guide.pdf
=> 所以解密密钥仅在设备保持解锁状态时有效
【讨论】:
谢谢。因此,只有在设备被锁定或启动时,数据才会被加密。这是有道理的。 英文版附件,apple.com/business/docs/site/iOS_Security_Guide.pdf以上是关于.equals()到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
"".equals--双引号的equals是啥意思?跪求解释