你是一只小猪仔 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条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)