gpt4 book ai didi

java - 静态字符串难题神秘行为

转载 作者:行者123 更新时间:2023-12-01 23:29:43 25 4
gpt4 key购买 nike

我有两个类。类Test 和类Application。测试类实现 Runnable 并且是一个线程..当然。

这两个类都有 public static void main。

First:

首先,我启动 Test 类,其中有一个类级别变量“a”

public static String a = "abc";

它指向一个字符串对象,在线程内部我只是为其分配一个新值并打印该值。

Secondly:

我启动了我的 Application 类,它也有一个 main 方法,我刚刚在类 Test 中打印了 Static String ,令人惊讶的是它打印了“abc”。请注意,我在 Test 类(class)开始后启动了第二个类(class)。理想情况下,它应该打印 NULL,因为 Java 沙箱中每个进程都在运行,并且一个进程不应访问其他进程。

现在我的问题是为什么?为什么它不应该打印新分配的字符串。我正在教授以下两门类(class)

import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author AZ
*/
public class Test implements Runnable {

public static String a = "abc";


@Override
public void run(){

while(true){
System.out.println(a);
a = new Date().toString();
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
class ThreadRunner {
static public void main(String args[]){
new Thread(new Test()).start();
}
}

二等

import com.springhibernate.beans.MessageBean;
import com.springhibernate.beans.Test;
import org.springframework.beans.factory.annotation.Autowired;

/**
*
* @author AZ
*/
public class Application {


public static void main(String args[]){


System.out.println("Test of printing String " + Test.a);

}
}

最佳答案

每个进程都有自己的静态字段副本。

但是,每个进程还运行类初始化程序,因此该字段的每个副本都被初始化为 abc

关于java - 静态字符串难题神秘行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com