作为标题为“等于和==之间的区别”的问题的一种跟进:在哪种情况下您会发现自己在Java/C#中测试引用相等性? 最佳答案 合并答案...When,typically,doyouuse==equalityonareferencetypedvariableinJava/C#?1。检查空值:if(a==null)...2。为了在构建equals实现时提高效率:booleanequals(Objecto){if(o==null)returnfalse;if(this==o)returntrue;//Somepeoplewouldprefer
什么时候应该将String作为对象进行比较,什么时候应该使用它们的equals方法?为了确定,我总是使用equals,但这似乎不是很有效。在什么情况下我可以确定string1==string2可以安全使用?谢谢! 最佳答案 您应该几乎总是使用equals。如果满足以下条件,您可以确定string1==string2会起作用:您已经确保以其他方式获得了不同的值(例如,您正在使用从集合中获取的字符串值,但出于其他原因比较它们)你知道你正在处理编译时字符串常量您自己手动插入了字符串根据我的经验,这种情况确实不会经常发生。
所以我购买了《JavaforDummies》第4版,我必须说这可能是我花30美元买的最值的一本书。我对编码并不陌生,如果我自己这么说的话,我实际上相当擅长。但是,我遇到了一行让我有点困惑的代码:publicvoidsetName(Stringn){if(!n.equals("")){name=n;}}我的问题出现在第三行,if(!n.equals(""))部分……我知道if循环是如何工作的(即:if(this==that){dostuff}),但我之前没有看到!n.equals("")设置。谁能给我解释一下?PS:只是猜测一下。是否与:publicvoidsetName(Stringn
我有一个不可变对象(immutable对象),例如笛卡尔空间中的一个节点。该类是不可变的,因此我缓存了hashCode以实现非常快速的散列。privatefinalinthashCode;privatefinaldoublex,y,z;publicNode(finaldoublex,finaldoubley,finaldoublez){this.x=x;this.y=y;this.z=z;this.hashCode=Objects.hashCode(this.x,this.y,this.z);}@Overridepublicbooleanequals(finalObjectobj){i
这可以重构吗?或者这看起来不错。(变量名称已更改)if(cmpScope.equals(GLOBAL)){returntrue;}elseif((cmpScope.equals(X)||cmpScope.equals(Y))&&cid==pid){returntrue;}elseif(cmpScope.equals(Z)&&cid!=pId){returntrue;}elseif(cmpScope.equals(V)&&cid==pid){returntrue;}elseif(cmpScope.equals(Z)&&cid==pid&&cSubId!=pSubId){returntru
如果我尝试在java中对空字符串执行.equals(),将抛出空指针异常。我想知道,如果我要比较一个字符串是否等于某个常量字符串,我可以执行以下操作吗:MY_CONSTANT_STRING.equals(aStringVariable)我知道它会起作用,但这真的是糟糕的代码吗? 最佳答案 这是一个标准的Java习语,被戏称为Yodacondition.我个人更喜欢显式处理null情况,但Yoda方式被广泛使用,任何有经验的Java程序员都应该能够立即理解发生了什么。很好用。 关于Java
BertBates和KathySierra的SCJP6学习指南第554页(以及其他要求)指出x.hashCode()!=y.hashCode()要求x.equals(y)==false.但是Object的Javadoc并没有明确提到这样的要求。引用:如果根据equals(Object)方法两个对象相等,则对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。我是否应该将Javadoc所说的视为实质蕴涵,例如eq->hc?那么这两个来源之间就不会有冲突。 最佳答案 这两个语句是等价的。简单地说:如果两个hashcode
Objecto1=newObject();Objecto2=newObject();//o1=o2;System.out.println(o1.equals(o2));它返回false。如果注释被删除,它可以返回true。为什么同样的事情不适用于String类?Strings1=newString();Strings2=newString();System.out.println(s1.equals(s2));它返回true。为什么?(因为String使用实习生或其他涉及的东西?) 最佳答案 因为equals()forString比
如果两个对象返回相同的hashCode,不就说明它们相等吗?或者我们需要equals来防止碰撞?我可以通过比较hashCode来实现equals吗? 最佳答案 如果两个对象具有相同的hashCode,则它们不一定相等。否则你会发现完美的散列函数。但恰恰相反——如果对象相等,则它们必须具有相同的hashCode。 关于java-有hashCode()为什么Java还需要equals()?,我们在StackOverflow上找到一个类似的问题: https://s
我有一个HashMap称为vertexIndexes.如果我用这段代码遍历它:publicbooleansearch(StringvertexName){for(Vertexname:vertexIndexes.keySet()){Stringkey=name.toString();Stringvalue=vertexIndexes.get(name).toString();System.out.println(key+""+value+""+(name.hashCode()==vertexName.hashCode())+""+name.equals(vertexName));}..