日期:2014-05-18  浏览次数:20674 次

JAVA 中String类型的一点小问题
在main函数中;
Scannner scanner = new Scanner(System.in);
String p;
System.out.println(p = "System.out.print(a)");
String x = scanner.nextLine();
if(x == p){
System.out.println("Good!");
}else {
System.out.println("Erroe");
System.out.println(x);
System.out.println(p);
}

这样 控制台输入 System.out.print(a)
怎么都输出Error呢 
对比完全一样啊。

------解决方案--------------------
字符串比较用equals

import java.util.Scanner;

public class ScannerTest {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String p;
System.out.println(p = "System.out.print(a)");
String x = scanner.nextLine();
if (x.equals(p)) {
System.out.println("Good!");
} else {
System.out.println("Erroe");
System.out.println(x);
System.out.println(p);
}
}
}

------解决方案--------------------
在java 中 == 符合是用来比较堆地址是否一样,equals是用来比较内容是否一样。
由于String 是final 修饰的,所有你在输入system.out.print(a)的时候,是在内存中新开辟了一个空间,所以堆地址是不样的。用equals可以比较内容一样。