小编jna*_*llo的帖子

Java增强的循环 - 编辑原始数组值

我想详细了解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循环不能用于从原始数组中删除元素,这是有道理的.修改值是否相同?

提前致谢

java for-loop memory-management

5
推荐指数
2
解决办法
3243
查看次数

使用重载和覆盖的方法选择

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)

所以:

  • A是B和C的超类
  • B是A的子类
  • C是A的子类
  • C是D和E的超类
  • D和E是C子类

所有这些类只有一个名为"f"的方法,其中包含所提到的签名.

我现在声明以下对象:

A a = new D();
B b = new B();
C c …
Run Code Online (Sandbox Code Playgroud)

java overloading

5
推荐指数
1
解决办法
141
查看次数

对象之间的类层次结构和转换

据我所知,不可能将超类的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吗?我认为这是不可能的,我的教科书另有说法.我已经搜索了很多,根据这个我是对的,这是教科书中的一个错误.

我错过了什么吗?

java casting

3
推荐指数
1
解决办法
927
查看次数

标签 统计

java ×3

casting ×1

for-loop ×1

memory-management ×1

overloading ×1