java - 考虑以下用 Java 编写的程序。为什么这个输出**2 2**。我认为这应该是输出 **1 1**

标签 java

考虑以下用 Java 编写的程序。为什么输出是2 2?我认为它应该输出 1 1

class Access{
  static int x;
  void increment(){
    x++;
  }
}

public class Main{
  public static void main(String args[])
  {
    Access obj1 = new Access();
    Access obj2 = new Access();
    obj1.x = 0;
    obj1.increment();
    obj2.increment();
    System.out.println(obj1.x + " " + obj2.x);
  }
}

最佳答案

静态变量在类的所有实例之间共享,当我们需要进行内存管理时它们很有用。在某些情况下,我们希望所有实例(例如全局变量)有一个共同的值,那么最好将它们声明为静态,因为这可以节省内存(因为只为静态变量创建单个副本)。

因此,当调用 obj1.increment() 时,它会将 x 的值更新 1。而当调用 obj2.increment() 时,它会将相同的静态引用更新 +1 并使其变为 2。最后 ypu 得到两者值为 2。下面的代码片段将打印值为 1 和 2。

obj1.increment();
System.out.println(obj1.x);
obj2.increment();
System.out.println(obj2.x);

关于java - 考虑以下用 Java 编写的程序。为什么这个输出**2 2**。我认为这应该是输出 **1 1**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57967499/

相关文章:

java - 列表和队列中所有权模式的差异

java - 了解锁定范围

java - 如何在java中检查当前的键盘语言

java - 如何将此代码从最小堆更改为最大堆

java - 如何处理SQL查询中的保留字符

java - 如何从代码中关闭 Java 应用程序

java - 如何忽略不重要的节点?

java - 使用Gradle和IntellIJ时Kotlin中未解析的引用 “java”

java - 在 Java 的这种情况下,自然顺序是什么意思?

java - 无法运行带有 Thymeleaf 支持的 Spring Boot WebMVC