你是一只小猪仔 2019-04-18 20:57 采纳率: 33.3%
浏览 1054
已采纳

为什么运用String里的equals方法没效果?

刚写了个本地验证码,发现验证码获取的是String数组,然后用StringBuffer转换成了String,接着就用EditText里面的getText().toString获取其中的内容与转换出来的验证码进行比较,结果发现无论怎么比较结果都是false。
代码如下:
private String[] res = new String[4];
private StringBuffer zhuanhuan;
res = mMyView.getValidataAndSetImage();
zhuanhuan=new StringBuffer();
for (String string:res){
zhuanhuan.append(string);
}
//这里Toast能显示出正确的验证码
Toast.makeText(zhuce.this,zhuanhuan,Toast.LENGTH_SHORT).show();
尝试过用Toast打印出yanzheng.getText().toString(),结果与上面的是一模一样
if ((yanzheng.getText().toString()).equals(zhuanhuan)) {}
else{Toast.makeText(zhuce.this,"错误",Toast.LENGTH_SHORT).show();}
但是就不会进入if里面,直接跳过else去,想了很久都没想到哪里出问题了
EditText的XML:
android:layout_width="129dp"
android:inputType="number"
android:ems="4"
android:background="#00000000"
android:id="@+id/yanzhengma"
android:hint="请输入验证码"
android:layout_height="33dp"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkView"
android:layout_marginTop="8dp" />

  • 写回答

2条回答 默认 最新

  • Cyansnow 2019-04-18 21:51
    关注

    zhuanhuan.toString(), StringBuffer的对象与String对象比较永远是false,因为类型都不一样,虽然都可以直接输出为字符串,不要认为StringBuffer和String就可以直接用equals方法比较了,StringBuffer是可变长度字符串,String是定长字符串,StringBuffer对象需要调用toString()方法,输出的时候编译器帮你隐式转换成了String,不重写equals方法的话,所有类的equals方法都继承Object的,调用equals方法时,如果比较的是同一个类型的对象,那么就会比较对象的引用以及内容是否相同(object 是使用==比较的,如果自己写一个类的话,需要重写equals方法,对类的每个属性分别比较),如果类型不相同那么就直接返回false了,可以看一下相关源码

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样