String Java变量只初始化一次

String Java变量只初始化一次,string,jvm,string-pool,String,Jvm,String Pool,我有以下代码: String test = "Test" + System.currentTimeMillis(); 当我多次打印这个字符串时,它会显示完全相同的值 System.out.println(test); Thread.sleep(1000L); System.out.println(test); 结果如下: Test1591096276651 Test1591096276651 为什么它不能在一秒钟内打印出有差异的结果 这是JVM缓存还是类似的东西? 变量初始化是如何工作的?

我有以下代码:

String test = "Test" + System.currentTimeMillis();
当我多次打印这个字符串时,它会显示完全相同的值

System.out.println(test);
Thread.sleep(1000L);
System.out.println(test);
结果如下:

Test1591096276651
Test1591096276651
为什么它不能在一秒钟内打印出有差异的结果

这是JVM缓存还是类似的东西? 变量初始化是如何工作的? JVM如何知道它已经初始化,以及如何强制它重新初始化


阅读一些文档/规范来阐明它为何如此有效,这将是一件非常棒的事情。

当您为变量赋值时,它会在该特定实例中对任何动态对象进行求值,除非您再次赋值,否则不会对其进行重新求值

String test=“test”+System.currentTimeMillis(); 打印测试 test=“test”+System.currentTimeMillis(); 打印测试


有什么具体要求吗

是的,我理解这一点,但我想在文档(JVM规范或其他官方文件)中阅读它,可以吗?当您编写
System.out.println(“Hello”),它也将只执行一次。不清楚为什么你认为这个基本原则,即代码不会在没有任何理由的情况下多次执行,可能会被变量初始值设定者违反,也不清楚为什么你认为遵守这个原则对JVM有任何障碍。@Holger很抱歉,描述不清,我的意思是,如果我在循环中执行它,它仍然会始终打印相同的值。所以你希望打印
test
的内容来更改
test
的内容吗?@Holger好的,认为每次使用变量都会重新初始化它是非常愚蠢的:)读取变量不会重复计算其初始值设定项。此外,缓存或字符串池是不相关的,因为
string
只是定义为一个字符序列,而不是封装可以(重新)计算的操作。与
suppliers=()->“Test”+System.currentTimeMillis()相反;System.out.println(test.get());睡眠(1000L);System.out.println(test.get())