gee*_*eks -2 java equals operator-keyword
"=="或Java中的等式运算符是Java编程语言提供的二元运算符,用于比较基元和对象.
"=="基于内存引用比较两个对象,因此"=="运算符只有在比较的两个对象引用表示完全相同的对象时才返回true,否则"=="将返回false.
我的问题是"=="运算符如何在java中比较对象?这里我们只关心引用是否引用对象.我们不是在谈论这种equals()方法.
嗯,它实际上非常简单,可以使用C代码进行说明.在C中,有各种方法来访问值.使用*指示指针,&指示内存地址,并且这些都不是默认值.例如:
int *myValue; // A pointer to an integer value.
Run Code Online (Sandbox Code Playgroud)
现在,Java隐藏了这一点,但它没有改变这就是发生的事实.
Object myObject; // A pointer to an Object.
Run Code Online (Sandbox Code Playgroud)
==它的工作方式是因为编译器将获取操作数的实际值; 不是他们指出的价值观.当它解析这两个对象时,它会留下内存地址,这就是它所比较的内容.这就产生了一种错觉,即它正在检查它们是否是同一个对象.
例
当你输入..
int x = 5;
int y = 4;
if(x == y) { System.out.println("Do something"); }
Run Code Online (Sandbox Code Playgroud)
在==被看出来了,x并y与他们所取代的实际值,因此它成为..
if(5 == 4)
Run Code Online (Sandbox Code Playgroud)
哪个,任何值得盐的编译器都可以评估为..
if(false)
Run Code Online (Sandbox Code Playgroud)
现在让我们用Objects做同样的事情.
Object object = new Object();
Object object2 = new Object();
Run Code Online (Sandbox Code Playgroud)
现在我们已经声明了两个指向两个独立对象的指针.在实际的值object是内存地址,因为是object2,所以当我们比较他们..
if(object == object2)
Run Code Online (Sandbox Code Playgroud)
这会被他们的内存地址所取代..
if(92305204950249t00 == 94205924059204t924)
// Just random values indicating memory addresses
Run Code Online (Sandbox Code Playgroud)
他们被比较了.它们是不同的,所以它变成..
if(false)
Run Code Online (Sandbox Code Playgroud)
与完全相同的方式int.
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |