2016-05-06 59 views
0

这是我Config下课后的旧值:静态最终变量重建

public class Config 
{ 
    public static final String urlApi = "http://127.0.0.1/api/"; 
} 

每当我想改变位置,我要改变这个变量的值:

public class Config 
{ 
    public static final String urlApi = "http://192.168.50.101/api/"; 
} 

在这种情况下,该值是:

http://192.168.50.101/api/

但在调试模式下,我看到“urlApi”具有旧值,旧IP地址。有点奇怪。我如何解决它 ?

+0

如果将其设置为最终值,该值永远不会更改。 –

+0

所以,如果我说:urlApi =“新东西”和buid项目,urlApi永远不会是“新东西”? – TariqN

+2

绝对不是。如果一个变量被声明为final,那么这意味着它只被初始化了一次 –

回答

0

您必须更改:

public class Config { 
    public static final String urlApi = "http://192.168.50.101/api/"; 
} 

到:

public class Config { 
    public static String urlApi = "http://192.168.50.101/api/"; 
} 

final keyword意味着这个字符串是一个常数 - 而不是一个变量。这是,它不能改变。删除final将允许字符串随时更改。

+0

我认为这不是重点。 – TariqN

+0

配置嵌套类吗?如果是这样,你用Config.urlApi调用urlApi吗? – 26hmkk

+0

不,配置不是嵌套类。 – TariqN

2

我解决了这个问题。我去“清洁工程”,然后再次“做项目”,我认为这是解释。

注意:如果原始类型或字符串被定义为一个常数,该值在编译时已知,编译器在与它的值的代码到处替换常量名。这被称为编译时常量。如果外部世界的常量值发生变化(例如,如果规定pi实际应该是3.975),则需要重新编译任何使用此常量的类来获取当前值。

+0

在答案中关于编译时间常数的假设可能是正确的。一个体面的IDE应该检测到这种情况,并触发重建受影响的类。 – siegi