标签: equality

在Android上的Java中字符串似乎并不相同,即使它们打印相同

我有一个问题,我很困惑.我在Android应用程序中有以下几行代码:

System.out.println(CurrentNode.getNodeName().toString());
if (CurrentNode.getNodeName().toString() == "start") {
    System.out.println("Yes it does!");
} else {
    System.out.println("No it doesnt");
}
Run Code Online (Sandbox Code Playgroud)

当我查看第一个println语句的输出时,它在LogCat中显示为"start"(显然没有引号).但是当if语句执行时,它会转到else语句并输出"No it does not".

我想知道节点的名称是否可能有某种非打印字符,所以我检查了来自getNodeName()的字符串的长度,它是5个字符长,正如您所期望的那样.

有谁知道这里发生了什么?

java string android equality equals

14
推荐指数
3
解决办法
2万
查看次数

如何检查2个jQuery选择器是否指向相同的元素?

如果我尝试这样的事情:

$(".foo") === $(".foo") // = false
Run Code Online (Sandbox Code Playgroud)

......我弄错了.如果我改为尝试此查询,

$(".foo").get(0) === $(".foo").get(0) // = true
Run Code Online (Sandbox Code Playgroud)

......我明白了.

那是因为:

{a:myObject} !== {a:myObject};
[myObject]   !== [myObject];
myObject     === myObject;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何简洁的方法来测试这种相等性,最好是内置到jQuery中.我写的第二种方法只有在最多只有一个匹配的元素时才能正常工作.foo.该解决方案适用于任何数量的元素.

显然我不想只检查,".foo" === ".foo"因为我使用的实际选择更复杂.我只是为这个例子简化了它们.(例如,我可能想检查$(this)是否选择了相同的东西$(".foo").)

javascript jquery equality jquery-selectors

14
推荐指数
2
解决办法
4102
查看次数

断言两个java bean是等价的

这个问题很接近,但仍然不是我想要的.我想以通用的方式断言两个bean对象是等价的.如果它们不是,我想要一个详细的错误消息来解释差异而不是布尔"等于"或"不等于".

java unit-testing assert equality javabeans

13
推荐指数
3
解决办法
2万
查看次数

hibernate/webapp上下文中的对象相等

你如何处理由hibernate管理的java对象的对象相等性?在"hibernate in action"一书中,他们说人们应该支持商业密钥而不是代理密钥.
大多数时候,我没有业务密钥.想一想映射到一个人的地址.地址保存在一个Set中,并显示在Wicket RefreshingView(具有ReuseIfEquals策略)中.

我可以使用代理id或使用equals()和hashCode()函数中的所有字段.
问题是那些字段在生命周期中对象变化.要么是因为用户输入了一些数据,要么由于在OSIV(在视图中打开会话)过滤器内调用JPA merge()而导致id发生变化.

我对equals()和hashCode()契约的理解是那些在对象的生命周期内不应该改变的.

到目前为止我尝试了什么:

  • equals()基于使用数据库id的hashCode()(如果id为null,则为super.hashCode()).问题:新地址以空id开头,但在附加到某人时获取id,并且此人在osiv-filter中合并()(重新附加).
  • 首次调用hashCode()时,延迟计算哈希码并使哈希码成为@Transitional.不起作用,因为merge()返回一个新对象,并且不会复制哈希码.

我需要的是在我认为在对象创建期间分配的ID.这里有什么选择?我不想引入一些额外的持久属性.有没有办法明确告诉JPA为对象分配ID?

问候

java wicket hibernate equality

13
推荐指数
1
解决办法
4873
查看次数

使用等于运算符==在C中比较两个字符串的相等性

int main (int argc, **argv)
{
       if (argv[1] == "-hello")
            printf("True\n");
       else
            printf("False\n");
}
Run Code Online (Sandbox Code Playgroud)
# ./myProg -hello
False

为什么?我意识到strcmp(argv[1], "-hello") == 0返回true ...但为什么我不能使用相等运算符来比较两个C字符串?

c string pointers equality equality-operator

13
推荐指数
5
解决办法
5万
查看次数

检查JUnit测试中的深度相等性

我正在为克隆,序列化和/或写入XML文件的对象编写单元测试.在所有三种情况下,我想验证结果对象是否与原始对象"相同".我在我的方法中经历了几次迭代,并且发现了所有这些问题的错误,想知道其他人做了什么.

我的第一个想法是在所有类中手动实现equals方法,并使用assertEquals.在决定覆盖equals以对可变对象执行深度比较之后,我放弃了这种方法是一件坏事,因为你几乎总是希望集合对它们包含的可变对象使用引用相等[1].

然后我想我可以将方法重命名为contentEquals或其他东西.然而,经过更多的思考,我意识到这无助于我找到我正在寻找的那种回归.如果程序员添加了一个新的(可变的)字段,并忘记将它添加到克隆方法中,那么他可能会忘记将它添加到contentEquals方法中,而我写的所有这些回归测试都将毫无价值.

然后我写了一个漂亮的assertContentEquals函数,它使用反射来检查对象的所有(非瞬态)成员的值,必要时递归.这避免了上面的手动比较方法的问题,因为它默认假定必须保留所有字段并且程序员必须显式声明要跳过的字段.但是,有一些合法的情况,克隆后字段确实不应该相同[2].我输入了一个额外的参数toassertContentEquals,它列出了要忽略的字段,但由于这个列表是在单元测试中声明的,所以在递归检查的情况下它真的很难实现.

所以我现在想回到在每个被测试的类中包含一个contentEquals方法,但这次使用类似于上面描述的assertContentsEquals的辅助函数实现.这种方式在递归操作时,将在每个单独的类中定义豁免.

任何意见?你过去如何处理这个问题?

编辑阐述我的想法:

[1]我从这篇文章中得到了理解,因为它没有覆盖可变类的等于.一旦你将一个可变对象粘贴在一个Set/Map中,如果一个字段发生变化,那么它的散列会改变但是它的存储桶不会改变它.因此,选项是不对可变对象重写equals/getHash,或者具有一个策略,一旦将可变对象放入集合中,就永远不会更改它.

我没有提到我正在现有的代码库上实现这些回归测试.在这种情况下,改变equals的定义,然后必须找到它可以改变软件行为的所有实例的想法吓坏了我.我觉得我可以轻松打破比我修复更多的东西.

[2]我们的代码库中的一个示例是图结构,其中每个节点都需要一个唯一的标识符,用于在最终写入XML时链接节点XML.当我们克隆这些对象时,我们希望标识符不同,但其他所有内容保持不变.在对它进行反复思考后,似乎问题"这个对象已经存在于此集合中"和"这些对象是否定义相同",在这种情况下使用基本不同的相等概念.第一个是询问身份,如果进行深度比较,我希望包括ID,而第二个是询问相似性,我不希望包含ID.这使我更倾向于实施equals方法.

你们同意这个决定,还是认为实施平等是更好的方法?

java junit equality

13
推荐指数
1
解决办法
3294
查看次数

不覆盖比较运算符的Python对象是否等于自身?

class A(object):

    def __init__(self, value):
        self.value = value

x = A(1)
y = A(2)

q = [x, y]
q.remove(y)
Run Code Online (Sandbox Code Playgroud)

我想从列表中删除之前添加的特定对象,并且我仍然有一个引用.我不想要一个平等测试.我想要身份测试.这段代码似乎在CPython和IronPython中都有效,但语言是否能保证这种行为还是仅仅是侥幸?

list.remove方法的文档是这样的:same as del s[s.index(x)],这意味着一个相等,执行测试.

如果你不覆盖__cmp__,那么一个物体是否等于它自己,__eq__或者__ne__

python equality

13
推荐指数
1
解决办法
5222
查看次数

在Java 7上的equals()和deepEquals()

方法描述说:

如果参数彼此非常相等则返回true,否则返回false ... 等于通过使用第一个参数的equals方法确定.

哪个(对我来说)表明,如果使用equals()方法,它们维护引用的每个对象也相等,则对象非常相等.他们所参考的每个物体也是平等的.并..

那么...... equality is determined by using the equals method of the first argument.

这有什么不同.equals()?假设我们恰当地描述了equals,对象等于另一个对象,对象的每个字段也等于它.

能否请您提供说明之间的差别的例子Objects.deepEquals()Objects.equals()

equality java-7 deepequals

13
推荐指数
2
解决办法
1万
查看次数

如何根据不同Java类的字段比较两个"等价"集合?

鉴于任何两个类,例如ClassAClassB以下:

class ClassA {
    private int intA;
    private String strA;
    private boolean boolA;
    // Constructor
    public ClassA (int intA, String strA, boolean boolA) {
        this.intA = intA; this.strA = strA; this.boolA = boolA;
    } // Getters and setters etc. below...
}

class ClassB {
    private int intB;
    private String strB;
    private boolean boolB;
    // Constructor
    public ClassB (int intB, String strB, boolean boolB) {
        this.intB = intB; this.strB = strB; this.boolB = boolB;
    } // Getters …
Run Code Online (Sandbox Code Playgroud)

java collections equality apache-commons guava

13
推荐指数
2
解决办法
2540
查看次数

:~: 和 :~~: 相等有什么区别?

其中Data.Type.Equality定义了两个类型级别的等式::~::~~:。据说它们分别代表同质平等和异质平等,但我并没有真正看到它们之间有什么区别。它是什么?

老实说,由于类型系统中值、类型和种类之间的严格边界,我没有看到在 Haskell 类型中实现真正的异构平等的方法。

haskell equality

13
推荐指数
2
解决办法
872
查看次数