null字符串测试始终为true

时间:2014-04-25 14:39:24

标签: java android string null

我已经看过很多类似的帖子,但似乎没有一个与此相同。我正在测试我的Java Android(2.2)应用程序中的字符串是否为null,无论字符串是什么,它总是如此。这是代码:

public static String getLocalBluetoothName(){
    String name;

    if(mBluetoothAdapter == null){
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }
    try{    
        name = mBluetoothAdapter.getName();
        if(name == null){
            System.out.println("Name is null!");
            name = mBluetoothAdapter.getAddress();
        }
    return name;
    }
    catch (Exception e){            
        return "";
    }
}

即使我的字符串有值,if(name == null)也始终为true。顺便说一句,我也试过mBluetoothAdapter.getName()== null,它也总是如此。我在某个地方看到你可以做那样的事情:

if(name.equals("null")){

}

但是如果字符串为null,则不会创建异常,因为如果对象为null,我不能使用方法?另外,测试" null"对我来说有点奇怪......

3 个答案:

答案 0 :(得分:2)

试试这个简化版:

public static String getLocalBluetoothName(){
    String name = null;

    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    if (adapter == null) {
        //System.out.println("Can't get adapter");
        Log.d(TAG, "Can't get adapter");
        return name;
    }

    if ((name = adapter.getName()) == null) {
        //System.out.println("Name is null!");
        Log.d(TAG, "Name is null!");
        name = adapter.getAddress();
    }

    return name;
}

并且不要忘记在您应用的清单中加入android.permission.BLUETOOTH权限。

另外,请注意,有时您的调试器可能会通过显示执行实际上未运行的特定分支来欺骗您(发生在我之前在Eclipse中进行调试)。因此,请确保您在logcat中实际输出Name is null,否则您的姓名可能不是null

答案 1 :(得分:1)

name = mBluetoothAdapter.getName();

由于name为空,您的蓝牙适配器可能没有名称。

答案 2 :(得分:0)

据我所知,mBluetoothAdapter.getName()总是返回null,这就是if条件总是返回true的原因。您的比较if(name == null)的方法绝对正确,毫无疑问。