嗨,我想知道为什么我总是敬酒我:"名字成功保存!" 我尝试了所有的事情。
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();
}
}
}
答案 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,因为它们是字符串文字,在运行时已知,您也不会在此明确说明新关键字。您只是指定您想要以某种方式在代码中表示的那些文字,因此编译器将它们内化。