gpt4 book ai didi

java - 为什么全局变量不随同一个全局变量中的全局函数更新?安卓/Java

转载 作者:行者123 更新时间:2023-12-02 11:23:03 25 4
gpt4 key购买 nike

对于 Android 中的应用程序我有一个全局变量,

public class ConstantsUrls {
public static String GET_CART_ALL_ITEM = "store/3/cart/" + CartFunctions.ReturnUserRrQuote() + "/type/customer"
}

并且有,

public class CartFunctions {
public static String ReturnUserRrQuote() {
String user_value = "";
//some function
return user_value;
}
}

当我调用函数时,让 A 参数 ConstantsUrls.GET_CART_ALL_ITEM

A(ConstantsUrls.GET_CART_ALL_ITEM);

我得到的正确值是store/3/cart/100/type/customer,但是当我再次调用时

具有相同参数的函数 A 我总是得到与 store/3/cart/100/type/customer 完全相同的值,即使 ReturnUserRrQuote() 不调用第二次获取更新值。

当我调用该函数时

A("store/3/cart/"+ CartFunctions.ReturnUserRrQuote() + "/type/customer")

而不是

A(ConstantsUrls.GET_CART_ALL_ITEM);  

我总是得到正确的工作(更新的正确值)

为什么全局变量不随同一全局变量内的全局函数更新。这个 Java 核心的行为是这样还是有其他原因?

最佳答案

在您的代码中,常量 GET_CART_ALL_ITEM 仅创建并初始化一次,并且它采用 ReturnUserRrQuote() 的当前值。稍后它不会触发该函数,因为常量已经有其值并且不需要新的初始化。

如果在代码开头ReturnUserRrQuote() =>“100”。然后创建 GET_CART_ALL_ITEM 并使用该值进行初始化,它将是 "store/3/cart/100/type/customer" 而不是 "store/3/cart/"+ ReturnUserRrQuote() +“/类型/客户”。这是由于在初始化时对表达式 "store/3/cart/"+ ReturnUserRrQuote() + "/type/customer" 进行求值,结果受到常量的影响(表达式不影响常数)。

因此,当您稍后调用此常量时,假设使用 ReturnUserRrQuote() => “250”。 GET_CART_ALL_ITEM 仍然是“store/3/cart/100/type/customer”。您尚未重新定义它以包含 ReturnUserRrQuote() 的新值(并且您不希望 java 这样做,否则它不会是常量)。

在您的情况下,您想要一个常量,因此每当 ReturnUserRrQuote() 更改时它都不会更改,这是正常的。或者您希望它每次都重新评估并且您不想要一个常量。你可以这样做:

public static final const1 = "store/3/cart/";
public static final const2 = "/type/customer";

//whenever you have to obtain your value
String value = const1 + ReturnUserRrQuote() + const2;

编辑:您谈论的是全局变量而不是常量,但问题是相同的。即使使用非全局变量。

//Static function that return the number of times it has been called
public static returnNumber() {
final int i=1;
return i++;
}

public static void main() {
int a = returnNumber(); //Initialize a
for (j=0; j<10; j++) {
System.out.println(a); //print the current value of a
}
}

在此示例中,a 将在 main 的开头进行初始化。表达式 returnNumber() 将被求值,结果将影响 a.这里是第一次调用 returnNumber,结果是 1。因此 a 的值是 1,而不是 returnNumber()。在循环中我调用 a 10 次并打印它。 10次​​a的值为1,数字1将被打印10次。每次我调用 a 时,它不会调用 returnNumber()

关于java - 为什么全局变量不随同一个全局变量中的全局函数更新?安卓/Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49791820/

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