java - 交换变量时奇怪的 java for-each 行为

标签 java

通过以下代码,我期望四个元素,但只得到三个。显然我正在做一些疯狂愚蠢的事情。

import java.util.HashSet;

import java.util.Set;

public class MyTest {
    public static void main(String[] args) {
        String[] myStrings = new String[] { "a", "b" };

        Set<String> set = new HashSet<String>();
        for (String x : myStrings) {
            for (String y : myStrings) {
                String temp = x;
                x = y;
                y = temp;

                set.add(x + y);
            }
        }

        System.out.println(set);
    }
}

结果:

[ba, aa, ab]

最佳答案

集合不允许重复,并且您要添加“ba”两次。如果您的循环控制令人困惑,但这是简化的跟踪,并扩展了右值。

x = "a"

y = "a"
temp = "a"
x = "a"
y = "a"
add("aa")

y = "b"
temp = "a"
x = "b"
y = "a"
add("ba")

x = "b"

y = "a"
temp = "b"
x = "a"
y = "b"
add("ab")

y = "b"
temp = "a"
x = "b"
y = "a"
add("ba")

关于java - 交换变量时奇怪的 java for-each 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446185/

相关文章:

Java泛型类作为参数

java - 如何调试从 Java 调用的 JavaScript 代码(通过 JSR-223)?

java - Log4j 1.x Sentry 附加器 : suppress warnings from specific sources for one appender

java - hibernate 方言

java - 什么时候在 Java 中进行类型检查

java - 关于如何提高 Java String 到 byte[] 转换性能的任何建议?

java - 想法tomcat8部署总是404

java - 在shell脚本或perl脚本中定义hadoop FS路径

Java,OpenCV VideoWriter isOpened 总是返回 false

java - 如何配置 JDK 1.6 以与仅 TLS 服务器进行 ssl 握手