package mypage;
import java.util.Scanner;
public class Main {
@SuppressWarnings("resource")
public static void main(String s[]){
Scanner in=new Scanner(System.in);
String value=in.next();
System.out.println(value);
if(value=="SUN")
System.out.println("“OK”你快出来啊");
}
}
这段代码你输入一个"SUN" 看看结果~!
然后再把if()里面的“==”改成“!=”,输入“SUN”,再试试结果~!
只求个解释~!
附图:
这个问题还是挺常见的。
在java中,你代码里的字符串“SUN”编译之后被放到了一个class文件的常量池中,当前main方法所在类被加载之后,“SUN”进入运行时常量池。而你输入的“SUN”采用的是System.in,则存在了本地内存中。
简单的说,你输入SUN之后,内存空间有两分SUN(一份是你的代码,一份是你输入的,二者并不在同一个内存块),而java中“==”操作符,你可以理解为比较的是内存地址,很明显两分“SUN”的内存地址并不一样,所以会出现你所谓“刷新java认知”的现象。
此处你可以将“==”换为.equals()方法,即if(“SUN”.equals(value)),就可以出现你想要的结果了。(可以简单的认为.equals()方法比较的是内容)
字符串应该是可以直接用==判定的.你打断点调试吧.
恩 我去试试!