以下代码似乎让我感到困惑,因为它提供了两个不同的输出.代码在jdk 1.7上进行了测试.
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
} …Run Code Online (Sandbox Code Playgroud) 或者这样做是明智的吗?为什么?
在PHP程序中,我有一些自定义对象的数组,我想找到数组是否包含某个对象.当然我可以使用array_search,但这会检查对象是否是同一个对象,而不是它是否具有相同的变量.所以我希望能够为对象创建自己的比较函数,我可以使用它与array_search方法(或类似的东西).我希望能够做到这样的事情:
class foo
{
public $_a,$_b;
function __construct($a,$b)
{
$this->_a = $a;
$this->_b = $b;
}
function __equals($object)
{
return $this->_a == $object->_a;
}
}
$f1 = new foo(5,4);
$f2 = new foo(4,6);
$f3 = new foo(4,5);
$array = array($f1,$f2);
$idx = array_search($f3,$array); // return 0
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?我知道我也可以创建自己的array_search方法,该方法使用类中的方法,但是我必须使用2个不同的搜索函数,一个用于具有自己的比较函数的类,另一个用于具有自己的比较函数的类.吨.
此方法返回'true'.为什么?
public static boolean f() {
double val = Double.MAX_VALUE/10;
double save = val;
for (int i = 1; i < 1000; i++) {
val -= i;
}
return (val == save);
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <iostream>
using namespace std;
int main()
{
char fg;
cin>>fg;
char x[20];
x[0]='0';
if(fg=x[0])
{
cout<<"It's true!"<<endl;
return true;
}
cout<<"It's false!"<<endl;
return false;
}
Run Code Online (Sandbox Code Playgroud)
无论我给出什么输入,true总是返回.我的语法是否关闭?任何帮助,将不胜感激.
上下文的一些代码:
class a
{
}
class b
{
public a a{get;set;}
public static implicit operator a(b b)
{
return b.a;
}
}
a a=null;
b b=null;
a = b;
//compiler: cannot apply operator '==' to operands of type tralala...
bool c = a == b;
Run Code Online (Sandbox Code Playgroud)
是否可以在不同类型的实例上使用==运算符,其中一个可以隐式转换为另一个?我错过了什么?
编辑:
如果类型必须是相同的调用==,那么为什么
int a=1;
double b=1;
bool c=a==b;
Run Code Online (Sandbox Code Playgroud)
作品?
我目前正在为==运算符创建一个重载函数.我正在为我的链表创建一个hpp文件,我似乎无法让这个操作符在hpp文件中工作.
我目前有这个:
template <typename T_>
class sq_list
{
bool operator == ( sq_list & lhs, sq_list & rhs)
{
return *lhs == *rhs;
};
reference operator * () {
return _c;
};
};
}
Run Code Online (Sandbox Code Playgroud)
我得到大约10个错误,但它们几乎重复为错误:
C2804:二进制'运算符=='参数太多
C2333:'sq_list :: operator ==':函数声明错误; 跳过函数体
C2143:语法错误:缺少';' 在'*'
C4430 之前:缺少类型说明符 - 假设为int.注意:C++不支持default-int
我试过改变一些事情,但我一直得到与上面相同的错误
任何提示或帮助都非常感谢.
c++ templates operator-overloading operators equals-operator
我已经在.NET Framework的GUID类型的源代码中看到Equals的实现和==操作符执行非常相似的代码.
为什么==操作符不在firts参数上调用Equals方法?像这样的东西:
public static bool operator ==(Guid a, Guid b)
{
return a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud) 如果我打开浏览器控制台(在Chrome/Firefox中测试)并输入:
null == {}
Run Code Online (Sandbox Code Playgroud)
我明白了:
假
但是,如果我将两个参数都传递给==运算符,而是键入:
{} == null
Run Code Online (Sandbox Code Playgroud)
我明白了:
未捕获的SyntaxError:意外的令牌==
图片:
编辑:
而问题35812626个地址本,并解释为JS解析原因{}作为代码块,它使用三重等于(严格比较)运算符===,而不是双等于==.正如用户在下面指出的那样,绝对可以遵循代码块==而不会导致语法错误:
{} == {} // false
Run Code Online (Sandbox Code Playgroud)
怎么会这样,我的例子没有?
equals-operator ×10
operators ×3
.net ×2
c# ×2
c++ ×2
java ×2
php ×2
char ×1
comparison ×1
integer ×1
javascript ×1
overloading ×1
overriding ×1
templates ×1
wrapper ×1