java - Java 中 println() 方法的奇怪行为

标签 java

class W {
    static int count=0;

    W() {
        count++;
        System.out.print("c ");
    }

    public static void main(String[] args) {
        System.out.println(new W().count+" "+new W().count);
    }
}

预期输出

c 1 c 2

实际输出

c c 1 2

为什么?

最佳答案

JVM 执行的实际顺序如下:

  1. 第一个 W 对象被实例化并读取其 count 属性。

    这里第一个 c 被发送到输出。

  2. 第二个 W 对象被实例化并读取其 count 属性。

    这里第二个 c 被发送到输出。

  3. System.out.println() 的字符串参数已构建。 ( == "1 2")

  4. 字符串参数被发送到输出。

这样输出结果到c c 1 2

关于java - Java 中 println() 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976868/

相关文章:

java - XML 文件没有循环通过 Out

以封装、多态和继承为特色的 Java 示例?

java - 如果 JVM 实现因一台机器而异,字节码生成如何使 Java 平台独立?

java - 将字符串传递给 VARCHAR 字段时不支持的 SQL 类型 1111

java - CTR 模式下的 AES 解密 (Java)

java - 使用android studio在内部存储中创建目录和文件夹

java - 测试 bundle 中是否存在某个值的更好方法?

java - Hibernate 4.1.3 Multi-Tenancy 空指针异常

java - 创建类路径资源 3 中定义的名称为 'springSecurityFilterChain' 的 bean 时出错

将 Java jar 文件放入存储库(CVS、SVN..)