可以将变量变量输入到null值吗?

问题描述 投票:1回答:2

我目前正在阅读Poornachandra Sarang的Java编程,并对Java Swing中JListgetSelectedValue()函数的使用有疑问。

我注意到source.getSelectedValue() != null(其中sourceJList)不仅检查了一次,在被铸造成字符串之后再次检查,如str != null所示。

鉴于此,(String)等演员是否有可能将变量变为null值?

public void actionPerformed(ActionEvent evt) {
    if (evt.getSource().equals(addButton)) {
        if (source.getSelectedValue() != null) {
            String str = (String) source.getSelectedValue();
            if(str != null) {
                destModel.addElement(str);
                dest.setSelectedIndex(0);
                sourceModel.removeElement(str);
                source.setSelectedIndex(0);
            }
        }
     }
}
java swing
2个回答
4
投票

诸如(String)之类的强制转换是否有可能将变量变为空值?

不,绝对不是。 (String) someObject给你null的唯一方法是someObject的价值已经是null

但是......

可以想象,以下可以将null分配给str

    if (source.getSelectedValue() != null) {
        String str = (String) source.getSelectedValue();

在多线程上下文中(实际上,Swing UI通常是多线程的!),另一个线程可以改变source,而这是代码正在执行,以便第一次和第二次调用getSelectedValue()返回不同的值。这是否是一个实际问题(以及可能的解决方案)将取决于更大的图景。

部分解决方案(即针对特定竞争条件)将重写代码的这一部分,如下所示:

    Object selected = source.getSelectedValue();
    if (selected != null) {
        String str = (String) selected;
        // ...
    }

但是,这并不一定能解决其他潜在的竞争条件。


-1
投票

鉴于此,诸如(String)之类的强制转换是否有可能将变量变为空值?

不,一旦你走得那么远,你可以放心,source.getSelectedValue()永远不会是空的。

此外,第二次空检查是多余的,可以删除。

希望这能回答你的问题 :)

© www.soinside.com 2019 - 2024. All rights reserved.