W_J_Z 2015-06-27 04:30 采纳率: 50%
浏览 1577
已采纳

Java字符串比较问题(好人为什么)

将回文转换为一个字符串后,反转此字符串,比较这两个字符串却不想等,求问什么?
String number1 = String.valueOf(number);
String number2 = new StringBuffer(number1).reverse().toString();
boolean answer = (number1 == number2 ) ? true : false ;
System.out.print(answer);
return answer ;

  • 写回答

2条回答 默认 最新

  • W_J_Z 2015-06-27 04:35
    关注

    找到答案了;
    总体来说java中字符串的比较是==比较引用,equals 比较值的做法。(equals 对于其他引用类型比较的是地址,这是因为object的equals方法比较的是引用),但是不同的声明方法字符串的比较结果也是不同的。
    例如: String str1=new String("a");
    String str2=new String("a");
    str1==str2 输出false
    str1.equals(str2) 输出true
    而如果这样声明

    String str1="a";
    String str2="a";
    str1==str2 输出true
    str1.equals(str2) 输出true
    这是因为 equals 方法本来也是比较引用的 字符串类在实现的时候重写了该方法, 第一种声明方法等于是声明了两个对象,用’==‘比较是时候比较的是引用输出的是false 由于他们的值相同用equals的时候就比较的是值了,输出true。
    而第二种情况不是因为比较有与第一种有差异,而是因为声明有差异,第二种声明方法在声明的时候有堆或堆栈 共用的现象,也就是说 在声明的时候如果如果声明为类属性他会检查在堆栈中有没有与现在声明的是相同结构的字符串。如果有就直接将地址指向已有内存地址。声明在方法内部的局部变量原理一样只不过他是堆栈共享。

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

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?