Java代码if语句未执行求助:回文字符串判断逻辑失效
问题分析与解决方案
嘿,这个问题我太熟啦!你遇到的核心问题是Java中字符串比较的方式用错了——你肯定是在if判断里用了==来比较原字符串和反转后的字符串,对吧?
为什么会出现这个问题?
在Java里,String是引用类型,==运算符比较的是两个字符串对象的内存地址,而不是它们的实际内容。哪怕你反转后的字符串和原字符串内容完全一致(比如回文字符串),反转操作生成的是一个新的String对象,和原字符串的内存地址不一样,所以==会返回false,导致你的if语句永远不会执行。
怎么解决?
把字符串比较换成equals()方法就好啦!String类的equals()方法是专门用来比较两个字符串的内容是否相等的。如果需要忽略大小写的回文判断,还可以用equalsIgnoreCase()。
修正后的完整代码示例
import java.util.Scanner; public class TestScannerPalindrome { static String reverse(String par) { String reversed = new String(); for(int i = par.length() - 1; i >= 0; i--) { reversed += par.charAt(i); } return reversed; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串:"); String original = scanner.nextLine(); String reversedStr = reverse(original); // 这里用equals()代替== if (original.equals(reversedStr)) { System.out.println("输入的是回文字符串!"); } else { System.out.println("输入的不是回文字符串!"); } scanner.close(); } }
额外小建议
另外,字符串拼接用+=在循环里效率不高,因为每次都会生成新的String对象。如果追求性能的话,可以改用StringBuilder来实现反转:
static String reverse(String par) { StringBuilder sb = new StringBuilder(par); return sb.reverse().toString(); }
这样代码更简洁,效率也更高~
内容的提问来源于stack exchange,提问作者BlueAngel209
相关产品推荐
相关产品推荐

