我想澄清一下我是否理解正确:
== - >是参考比较,即两个对象都指向相同的内存位置.equals() - >计算对象中值的比较我的理解是正确的吗?
这两种方法有什么区别?他们似乎做同样的事情对我来说(也无二parseFloat(),parseDouble(),parseLong()等等,他们如何不同Long.valueOf(string)?
编辑:此外,哪些是更好的,并按惯例更常使用?
当我遇到Joel Spolsky时,我正在阅读更多关于Joel on Software的文章,说明一种特定类型的程序员知道a 和Java/C#(面向对象编程语言)之间的区别.intInteger
那么区别是什么呢?
关于我之前的问题,为什么==与Integer.valueOf(String)的比较给出了127和128的不同结果?,我们知道Integer class有一个缓存存储-128和之间的值127.
只是想知道,为什么介于-128和127之间?
Integer.valueOf()文档声明它" 缓存经常请求的值 ".但是-128,127经常要求真实的价值吗?我认为经常要求的价值观是非常主观的.
这背后有什么可能的原因吗?
从文档中还说:" ..并且可以缓存此范围之外的其他值. "
如何实现这一目标?
我知道这是一个非常基本的问题,但我想明确这个概念.我想知道==运算符在原始类型和对象类型的情况下如何工作.例如
Integer a = 1;
int b = 1;
System.out.println(a == b)
Run Code Online (Sandbox Code Playgroud)
如何a与之比较b,而a包含包含值1的对象的引用.有人可以向我清楚它是如何在内部工作的吗?
以下代码似乎让我感到困惑,因为它提供了两个不同的输出.代码在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) 这个问题出现在我用 Java 编写的实习职位面试问题之一中。请注意,布尔函数isSame实际上将 2 个参数声明为Integerclass - not int,所以我认为a和b是对象,对吗?
public class ForLoop{
public static boolean isSame(Integer a, Integer b) {
return a == b;
}
public static void main(String []args){
int i = 0;
for (int j=0; j<500; ++j) {
if (isSame(i,j)) {
System.out.println("Same i = "+i);
System.out.println("Same j = "+j);
++i;
continue;
} else {
System.out.println("Different i = "+i);
System.out.println("Different j = "+j);
++i;
break;
}
}
System.out.println("Final i = " …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中检查Integer相等,但遇到了一个奇怪的行为.在某些时候我的应用程序正常工作,但在某些时候它失败了.所以我在这里写了一个测试代码
public class EqualityTest {
public static void main(String args[]) {
Integer a = 100;
Integer b = 100;
Integer c = 1000;
Integer d = 1000;
if (a == b) {
System.out.println("a & b are Equal");
}
else {
System.out.println("a & b are Not Equal");
}
if (c == d) {
System.out.println("c & d are Equal");
} else {
System.out.println("c & d are Not Equal");
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量
a & b are Equal
c & d are Not …Run Code Online (Sandbox Code Playgroud) 当我比较具有相同值的两个双基元类型时,为什么等于方法是错误的?但整数不是
public class EqualMethod {
public static void main(String[] args) {
Double value1 = 6.2;
Double value2 = 6.2;
System.out.println(value1 == value2);
Integer number1 = 2;
Integer number2 = 2;
System.out.println(number1 == number2);
}
}
Run Code Online (Sandbox Code Playgroud)