我想详细了解Enhanced For Loop如何在Java中工作(假设我确实了解了这个循环的基本用法以及它是如何工作的).
给出以下代码:
String[] a = {"dog", "cat", "turtle"};
for (String s : a) {
out.println("String: " + s);
s = in.readLine("New String? ");
}
Run Code Online (Sandbox Code Playgroud)
它实际上并没有修改原始列表'a'.为什么不?内存管理如何工作?这不是'a [i]'的同一个存储单元的引用吗?
我在oracle文档中读到,增强for循环不能用于从原始数组中删除元素,这是有道理的.修改值是否相同?
提前致谢
JVM如何选择执行哪种方法?
选择过程分为两部分是否属实?首先,编译JVM时会查找要执行的候选方法.它在声明的对象类中选择所需的签名(不是有效的签名).一旦选择了候选签名,它就会从对象的有效类开始在层次结构中查找它.
它是否正确?
还有一个问题:
这是一个类层次结构和相关方法:
- Class A: +f(short x): int; +f(String x): int;
- Class B extends A: +f(int x): int; +f(String x): int;
- Class C extends A: +f(double x): int; +f(byte x): int;
- Class D extends C: +f(byte x): int; +f(short x): int;
- Class E extends C: +f(char x): int; +f(int x): int;
Run Code Online (Sandbox Code Playgroud)
所以:
所有这些类只有一个名为"f"的方法,其中包含所提到的签名.
我现在声明以下对象:
A a = new D();
B b = new B();
C c …
Run Code Online (Sandbox Code Playgroud) 据我所知,不可能将超类的Object转换为子类的Object.这将编译但在运行时它将返回错误.
更具体地说,给定以下层次的类和接口:
.Alpha是Beta和Gamma的超类
.Gamma是Delta和Omega的超级课程
.接口"In"由Beta和Delta实现
在这种情况下,我定义以下代码:
Delta r;
Gamma q;
Run Code Online (Sandbox Code Playgroud)
它是否正确?
r = (Delta) q;
Run Code Online (Sandbox Code Playgroud)
即使Delta是Gamma的子类,我可以将q转换为Delta吗?我认为这是不可能的,我的教科书另有说法.我已经搜索了很多,根据这个我是对的,这是教科书中的一个错误.
我错过了什么吗?