Java 比较EditText中的文本与数据库中的字符串

Java 比较EditText中的文本与数据库中的字符串,java,android,Java,Android,这段代码应该比较输入到R.id.editUserName中的文本与R.string.DB_用户名,如果它们匹配,请登录,否则显示不匹配的toast public void signIn(View view) { EditText editUserName = (EditText)findViewById(R.id.editUserName); String userName = editUserName.getText().toString(); if ( userName ==

这段代码应该比较输入到R.id.editUserName中的文本与R.string.DB_用户名,如果它们匹配,请登录,否则显示不匹配的toast

public void signIn(View view) {

  EditText editUserName = (EditText)findViewById(R.id.editUserName);
  String userName = editUserName.getText().toString();

  if ( userName ==  getResources().getString(R.string.DB_username)) {
    // log in
    setContentView(R.layout.screen1);
  } else {
    // show toast
    Toast toast = Toast.makeText(getApplicationContext(), userName+" != "+getResources().getString(R.string.DB_username), Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
  }
}

即使他们真的匹配了,它仍然会显示祝酒词,比如罗杰!=罗杰。。。那怎么可能呢?

不要那样比较它们。使用java提供的字符串比较函数来比较它们

请参阅:

我认为您需要查找Java equality是引用平等。使用字符串的equals方法,即

if ( userName.equals(getResources().getString(R.string.DB_username)))

明白了吗?

您无法在Java中比较这样的字符串。你需要:

if (userName.equals(...))

您的代码所说的是,这两个东西在内存中是完全相同的对象吗?而不是这些对象的内容是否相同?

当字符串本身是不同的对象时,它不匹配。你应该使用

if ( userName.equals(getResources().getString(R.string.DB_username)))

这将比较实际的字符串。

谢谢,成功了!:奇怪的是,java不喜欢这种C风格的比较,却没有抛出任何错误。是的,这与java中如何看待字符串有关。它与C语言不同,但即使如此,在任何语言中使用字符串时,也应始终使用包装器方法,而不是直接比较。简单的问题“生命的意义是什么?”也是一个简单的问题。这是一个棘手的答案。或者换一种说法,除非你已经知道答案,否则你怎么知道这是一个简单的答案?