gpt4 book ai didi

java - 了解作为实例的应用程序范围内的属性

转载 作者:行者123 更新时间:2023-11-30 03:31:01 27 4
gpt4 key购买 nike

我有两个 JSP 文件,每个文件都由不同的 PC 访问。

在第一个中,我创建了一个 Integer 类型的对象:

Integer var = 0;
application.setAttribute("name_var", var);

在第二个中,我获取了之前创建的属性:

var = (Integer) application.getAttribute("name_var");

此时一切都很好。我在另一台 PC 上的第二个 JSP 中得到了我的值。

由于 Java 是按值传递的,其中值是引用 ( Is Java "pass-by-reference" or "pass-by-value"? ),我想我在两个 JSP 文件中都有相同的实例(被不同的 PC 访问)。

所以现在,当我修改我的 var 值时,它在另一端似乎没有修改,我不明白为什么。

var++;
Output (in the JSP where the attribute was set): 0 (still)

谁能解释一下发生了什么?每次修改对象的值时,是否都需要使用 setAttribute 更新该对象?

提前谢谢

最佳答案

var++ 不会更改应用程序中存储的 Integer 实例的内部状态。整数是不可变的。它的状态永远不会改变。

操作相当于

int tmp = var.intValue();
tmp = tmp + 1;
var = Integer.valueOf(i);

因此,var 现在引用了另一个 Integer 实例,而不是存储在应用程序中的实例。

另一种方法是再次在应用程序中存储新值,或者在应用程序中存储线程安全的可变值:

AtomicInteger var = new AtomicInteger(0);
application.setAttribute("name_var", var);
...
var.incrementAndGet();

关于java - 了解作为实例的应用程序范围内的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038898/

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