多重检查或,以及if语句

时间:2016-10-21 20:18:35

标签: android if-statement

嗨,我想知道为什么我总是敬酒我:"名字成功保存!" 我尝试了所有的事情。

public void btnSave_Clicked(View view) {
        TextView txtOname = (TextView)findViewById(R.id.txtOname);
        TextView txtXname = (TextView)findViewById(R.id.txtXname);
        String X = txtXname.getText().toString();
        String O = txtOname.getText().toString();
        if((X!="") && (O!="")){
            DatabaseHelper.insertName(getBaseContext(),((TextView)findViewById(R.id.txtOname))
                    .getText().toString());
            DatabaseHelper.insertName(getBaseContext(),((TextView)findViewById(R.id.txtXname))
                    .getText().toString());
            Toast.makeText(this,"names Successfully saved!",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(this,"E",Toast.LENGTH_SHORT).show();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

字符串是Java中的引用类型,因此动态创建的空字符串的引用将与您的变量不同。 isEmpty的另一个选项是equals

if (!x.equals("") && !o.equals(")) {
    //code
}

虽然我可能会选择isEmpty

答案 1 :(得分:0)

将if语句替换为:

if (!x.isEmpty() && !o.isEmpty()) {
    //code
}

operator ==比较对象引用。

.equals()比较字符串值。

如果String length为0,则

.isEmpty()返回true。

答案 2 :(得分:0)

字符串是对象。必须手动将对象实例(它们背后的值)与方法进行比较,以确保内容相同。

==运算符只是比较字符串引用(“地址”)。因此,当您在运行时创建2个对象实例时,即使内容相同,它们也会有不同的地址。另一方面,编译时字符串是内部化的,它们被放入特殊的内存中,并且重复排序。

System.out.println(new String("test") == new String("test"));

这将打印false,因为这两个对象是在运行时创建的。第一个示例中的new关键字要求创建具有新地址的新对象。

System.out.println("test" == "test");

这将打印为true,因为它们是字符串文字,在运行时已知,您也不会在此明确说明新关键字。您只是指定您想要以某种方式在代码中表示的那些文字,因此编译器将它们内化。