标签: equality

什么是比较参考类型的两个实例的"最佳实践"?

我最近遇到过这种情况,到目前为止,我一直在愉快地重写等于运算符(==)和/或Equals方法,以查看两个引用类型是否实际包含相同的数据(即两个看起来相同的不同实例).

我一直在使用它,因为我已经进行了更多的自动化测试(比较参考/预期数据与返回的数据).

在查看MSDN中的一些编码标准指南时,我遇到了一篇建议反对它的文章.现在我理解为什么文章说这个(因为它们不是同一个实例)但它没有回答这个问题:

  1. 比较两种参考类型的最佳方法是什么?
  2. 我们应该实施IComparable吗?(我还看到提到这应该仅为值类型保留).
  3. 有一些我不知道的界面吗?
  4. 我们应该自己动手吗?!

非常感谢^ _ ^

更新

看起来我错误地阅读了一些文档(这是漫长的一天)并且压倒Equals可能是要走的路.

如果要实现引用类型,则应考虑在引用类型上覆盖Equals方法(如果类型看起来像基本类型,如Point,String,BigNumber等).大多数引用类型不应重载等于运算符,即使它们重写等于.但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则应覆盖相等运算符.

.net c# comparison equality operator-overloading

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

Java:如何测试数组相等?

为什么以下代码打印"Different."

boolean[][] a = { {false,true}, {true,false} };
boolean[][] b = { {false,true}, {true,false} };

if (Arrays.equals(a, b) || a == b)
    System.out.println("Equal.");
else
    System.out.println("Different.");
Run Code Online (Sandbox Code Playgroud)

java arrays equality

45
推荐指数
3
解决办法
6万
查看次数

如何测试两个dateTimes是同一个日期?

可能重复:
如何比较C#中的日期

我的这个代码:

public static string getLogFileNameForDate(DateTime dt)
{
    if (dt.Equals(DateTime.Now))
Run Code Online (Sandbox Code Playgroud)

...即使两个日期相同(日期)也会失败,因为dt在启动时被分配了一个值(例如"6/18/2012 15:19:42"),因此日期不完全相同,甚至虽然年,月和日是相同的(DateTime.Now的值可能是,例如,"6/18/2012 15:30:13").

我知道我可以这样测试它:

if ((dt.Year.Equals(DateTime.Now.Year) && (dt.Month.Equals(DateTime.Now.Month) && (dt.Day.Equals(DateTime.Now.Day))
Run Code Online (Sandbox Code Playgroud)

......但这似乎有点像Jethro*

什么是接受/首选方法(没有双关语意)?

  • Clampett,不是Tull

c# datetime equality

45
推荐指数
1
解决办法
4万
查看次数

当两者都可以为空时如何比较两个字符串?

我知道最好equals使用==运算符调用该方法(请参阅此问题).我希望两个字符串比较相等,如果它们都是null或者它们代表相同的字符串.不幸的是,如果字符串是equals,NPE则该方法将抛出null.我的代码目前是:

boolean equals(String s1, String s2) {
  if (s1 == null && s2 == null) {
    return true;
  }
  if (s1 == null || s2 == null) {
    return false;
  }
  return s1.equals(s2);
}
Run Code Online (Sandbox Code Playgroud)

这是不优雅的.执行此测试的正确方法是什么?

java equality equals

45
推荐指数
2
解决办法
9582
查看次数

如何检查两个Expression <Func <T,bool >>是否相同

是否有可能找出两个表达式是否相同?

喜欢以下四个表达式:

        Expression<Func<int, bool>> a = x => false;
        Expression<Func<int, bool>> b = x => false;
        Expression<Func<int, bool>> c = x => true;
        Expression<Func<int, bool>> d = x => x == 5;
Run Code Online (Sandbox Code Playgroud)

那么,至少我们可以看到:

  • a == b
  • a != c
  • a != d

但我可以在我的代码中做任何事情来解决这个问题吗?

在msdn库中查看了它

Equals:确定指定的Object是否等于当前Object.(继承自Object.)

我想这意味着至少Expression类没有覆盖equals方法成为Equatable?那你怎么做?或者我在这里要求太多了?:p

c# expression equality

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

我可以使用'=='来比较两个向量.我试过了,似乎工作正常.但我不知道它是否适用于更复杂的情况

第一个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 30, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns equal 
Run Code Online (Sandbox Code Playgroud)

第二个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 100000, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns notequal 
Run Code Online (Sandbox Code Playgroud)

c++ equality vector operator-overloading

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

如何检查两个变量是否在Python中引用同一个对象?

x和y是两个变量.
我可以检查它们是否相同x == y,但我如何检查它们是否具有相同的身份?

例:

x = [1, 2, 3]
y = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

现在x == y是True,因为x和y相等,但是x和y不是同一个对象.
我正在寻找像sameObject(x, y)这种情况应该是假的东西.

python equality

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

在C++中比较数组是否相等

有人可以向我解释为什么以下代码的输出是说数组不相等

int main()
{

    int iar1[] = {1,2,3,4,5};
    int iar2[] = {1,2,3,4,5};

    if (iar1 == iar2)
        cout << "Arrays are equal.";
    else
        cout << "Arrays are not equal.";

    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays comparison equality

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

swift对象中的自定义相等性,保留了与传统Objective-C代码的兼容性

在Objective-C中你会做一些事情

- (BOOL)isEqual:(id)other {
    if (other == self)
        return YES;
    if (!other || ![other isKindOfClass:[self class]])
        return NO;
    return [self.customProperty isEqual:other.customProperty];
}
Run Code Online (Sandbox Code Playgroud)

我在斯威夫特的第一次天真尝试如下

func isEqual(other: AnyObject) -> Boolean {
    if self === other {
        return true
    }
    if let otherTyped = other as? MyType {
        return self.myProperty == otherTyper.myProperty
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)

但我对此并不满意.我甚至不知道签名是否正确,或者我们是否应该使用不同的签名isEqual.

有什么想法吗?

编辑:我也想保持Objective-C兼容性(我的类用于遗留的Obj-C代码和新的Swift代码).所以我认为只有压倒==是不够的.我错了吗?

equality swift

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

Java是否保证Object.getClass()== Object.getClass()?

我的确意味着身份平等.

例如,以下内容是否始终打印为

System.out.println("foo".getClass() == "fum".getClass());
Run Code Online (Sandbox Code Playgroud)

java identity jvm equality class

39
推荐指数
3
解决办法
5987
查看次数