我正在做一些关于Java的研究,发现这很令人困惑:
for (int i = 0; i < 10; i = i++) {
System.err.print("hoo... ");
}
Run Code Online (Sandbox Code Playgroud)
这是永无止境的循环!
任何人都有很好的解释为何会发生这样的事情
我做 Java 开发人员已经很多年了,最近我在 Kotlin 中发现了一些非常令人惊讶的东西。在 Java 中有一个很少使用的逻辑运算符^ XOR,但有时它很有用。例如:您可以轻松检查两个数字中是否只有一个大于零。
使用&& AND运算符和一些变量a,b它看起来像这样:
boolean valid = (a > 0 && b <= 0) || (a <= 0 && b > 0);
Run Code Online (Sandbox Code Playgroud)
但它可以通过^ XOR轻松实现:
boolean valid = a > 0 ^ b > 0;
Run Code Online (Sandbox Code Playgroud)
现在,在 Kotline 中,我们不用^作XOR,但xor在 Kotlin 中只是相同的代码如下所示:
val valid = a > 0 xor b > 0;
Run Code Online (Sandbox Code Playgroud)
这里出现了一个问题,因为 Kotline 中的这段代码给出了……编译错误!!为什么?因为在 Java 中,所有逻辑运算符 ( &,&&,|,||,^ …
我对Java和instanceof运算符中的泛型有疑问.
做这样的检查实例是不可能的:
if (arg instanceof List<Integer>) // immposible due to
// loosing parameter at runtime
Run Code Online (Sandbox Code Playgroud)
但是可以运行这个:
if (arg instanceof List<?>)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是 - arg instanceof List 和 之间有什么区别arg instanceof List<?>吗?
我在理解这种泛型方法调用时遇到问题:
object = ObjectGenerator.<T> getObject(objectName);
Run Code Online (Sandbox Code Playgroud)
以下是上述情况的背景:
class GenClass<T> {
private T object;
// ... some code
public void initObject(String objectName) {
object = ObjectGenerator.<T> getObject(objectName);
}
}
class ObjectGenerator {
public static <T extends Object> T getObject(String name) {
// some code
return someObject;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是<T>在getObject(objectName)调用之前扮演什么角色?