7

我有一个将文本放入arrayList 的类。然后,当我尝试将变量与 == "test"; 之类的字符串进行比较时,它将所有变量转换为 CharSequences;它在这里不起作用是我用来获取变量的代码

class Item {
            String descs;

            public Item (String descs){

                 this.descs = descs;

                 }


            public CharSequence getDescs() {
                return descs;
            }
        }

这是将其与字符串进行比较的代码

 if(p.getDescs().toString() == "trash"){

          descsView.setVisibility(View.GONE);

                            }

          else{
              descsView.setText(p.getDescs());

                            }

我知道 p.getDescs() 等于垃圾,因为当它为 decsView 设置文本时,它被设置为垃圾。那么为什么第一个 if 语句不起作用?

4

6 回答 6

18

使用.equalsor.equalsIgnoreCase比较字符串

     if(p.getDescs().toString().equals("trash"))

还要检查这个

Java 中 == 与 equals() 有什么区别?

于 2013-09-09T02:48:53.913 回答
15

介绍

ACharSequence是一种通用类型,包括其他类型,如StringStringBuilderSpannableString等。如果您要比较两个字符串,则可以使用.equals(请参阅此问题)。但是,如果您将 aString与 a进行比较CharSequence,则必须确定要比较的是什么,因为您可能正在将 aString与 aStringBuilder或 aSpannableString或其他东西进行比较。

仅比较内容

如果只想比较 a 的内容(即文本)和String的内容,CharSequence而不关心类型,那么可以使用String.contentEquals().

String myString = "hello";
CharSequence myCharSequence = new StringBuilder("hello");

boolean areEqual = myString.contentEquals(myCharSequence); // true

比较内容和类型

如果您还想确保除了内容之外的类型相同,请使用String.equals().

String myString = "hello";
CharSequence myCharSequence = new StringBuilder("hello");

boolean areEqual = myString.equals(myCharSequence); // false

这里又是相同的类型。

String myString = "hello";
CharSequence myCharSequence = "hello"; // String

boolean areEqual = myString.equals(myCharSequence); // true

也可以看看

于 2017-11-10T12:45:19.273 回答
3

您需要使用equals()字符串比较的方法...

if(p.getDescs().toString().equals("trash")){
    descsView.setVisibility(View.GONE);
    }
else{
    descsView.setText(p.getDescs());
    }

请参阅如何在 Java 中比较字符串?了解更多信息。

于 2013-09-09T02:50:06.463 回答
1

最好的方法应该是这样的

if("trash".equals(p.getDescs()){
    descsView.setVisibility(View.GONE);
    }
else{
    descsView.setText(p.getDescs());
    }

或者,如果比较不区分大小写,则

 if("trash".equalsIgnoreCase(p.getDescs()){
        descsView.setVisibility(View.GONE);
        }
    else{
        descsView.setText(p.getDescs());
        }

功能

 <String>.equalus(Object)

将任何字符串变量与对象变量的值进行比较

注意:因为 的值p.getDescs()可能为 null

所以使用

if(p.getDescs().toString().equals("trash")){
    descsView.setVisibility(View.GONE);
    }
else{
    descsView.setText(p.getDescs());
    }

可能通过运行时错误

以下链接可能会有所帮助

如何比较 CharSequence[] 的字符串值?

CharSequence 与字符串

于 2013-09-09T03:03:45.677 回答
1

如果 decs 是您的 CharSequence 变量:

descs.toString().equals("SomeString");
于 2013-09-09T02:48:41.273 回答
0

当前接受的答案

if(p.getDescs().toString().equals("trash"))

可以简化为

if("trash".contentEquals(p.getDescs()))

Suragch 的“介绍”答案提供了详细信息。这是直接将 CharSequence 与 String 进行比较的方法,这是 OP 所要求的。

于 2018-05-10T14:48:41.863 回答