对于Java的处理方式==
以及equals()
涉及到的数字和其他类型的数字int
,我有些困惑Integer
。例如:
Integer X = 9000;
int x = 9000;
Short Y = 9000;
short y = 9000;
List<Boolean> results = new ArrayList<Boolean>();
// results.add(X == Y); DOES NOT COMPILE 1)
results.add(Y == 9000); // 2)
results.add(X == y); // 3)
results.add(X.equals(x)); // 4)
results.add(X.equals(Y)); // 5)
results.add(X.equals(y)); // 6)
System.out.println(results);
输出(也许您应该先猜测一下):
[true, true, true, false, false]
X == Y
不能编译是可以预料的,是不同的对象。 Y == 9
是true
,默认情况下9是an int
,并且1)甚至没有编译。请注意,您不能将int
放入期望使用的方法中Short
,但是在这里它们是相等的。x
装箱到和Integer
。equal()
。X == y
是true
但是X.equals(y)
是false
?难道不应该==
总是比equals()
?如果有人能帮助我理解这一点,我将不胜感激。由于什么原因,==和equals()会以这种方式运行?
编辑: 我已将9更改为9000,以表明此行为与-128到127的整数的行为无关。
2 次编辑: OK,如果你认为你明白这东西,你应该考虑以下内容,只是为了确保:
Integer X = 9000;
Integer Z = 9000;
short y = 9000;
List<Boolean> results = new ArrayList<Boolean>();
results.add(X == Z); // 1)
results.add(X == y); // 2)
results.add(X.equals(Z)); // 3)
results.add(X.equals(y)); // 4)
System.out.println(results);
输出:
[false, true, true, false]
据我所知,其原因是:
X
拆箱,然后相同的值,所以相等。y
不能装箱,Integer
所以不能相等。的原因
X == y
正确与二进制数值提升有关。当至少一个等于运算符的操作数可转换为数值类型时,将使用数值等于运算符。首先,第一个操作数被取消装箱。然后,两个操作数都转换为int
。
而
X.equals(y)
是正常的函数调用。如前所述,y
将自动装箱到一个Short
对象。Integer.equals
如果参数不是Integer
实例,则始终返回false
。通过检查实现可以很容易地看出这一点。
有人可能会说这是设计缺陷。
如果我运行deldeldel(“adel”),它会返回一个,但是,adel的长度是4,这意味着最后一个字符串索引是3,为什么str.substring(4,str.length()没有超出范围?
当我只运行预处理器时,输出文件包含20。 然而,据我所知,预处理器只是进行文本替换。所以这就是我认为正在发生的事情(这显然是错误的,但idky): NUM被定义为10 所以我认为输出应该是10而不是20。有什么能解释出哪里出了问题吗?
关于静态和动态之间的区别,我仍然有点困惑。据我所知,动态使用对象,而静态使用类型,动态在运行时解析,而静态在编译时解析。所以this.lastName.compare(s1.last名称)不应该使用动态绑定吗? 钥匙compareTo(list[position-1])使用动态绑定 (this . last name . compare to(S1 . last name))为什么使用静态绑定?
我试图理解背后的动机。如果已经存在类型类和,为什么有必要呢? 诚然,的实例是具体的类型,而的实例需要一个类型参数。(有关有用的解释,请参见Monoid vs MonadPlus。)但是你不能重写任何类型的约束吗 作为和的组合? 从。它的实施是: 我只能使用和实现它: 有人能澄清和之间的真正区别吗?
问题内容: 我已经在Android代码中使用FloatBuffers一段时间了(从一些opengles教程中复制了它),但是我无法确切地理解此构造是什么以及为什么需要它。 例如,我在许多人的代码和android教程中看到了以下代码(或类似代码): 就我所知,这似乎是冗长和混乱的,我只是说它们只是一个浮点数的包装而已。 问题: 与任何其他类型的float集合或简单数组相反,这种类型的类(ByteBu
问题内容: 听说您应该在样式表中使用em而不是像素来定义尺寸和距离。所以问题是,为什么在CSS中定义样式时应该使用em而不是px?有一个很好的例子可以说明这一点吗? 问题答案: 我问这个问题的原因是,我忘记了如何使用em,因为我在CSS中愉快地编程时已经很久了。人们没有注意到我把这个问题笼罩了,因为我并不是在谈论字体本身的大小。我对如何在页面上的 任何给定块元素 上定义样式更感兴趣。 正如Henr