首页 新闻 会员 周边 捐助

java大神看看吧~!又冲破了我对java的认知了~!

0
悬赏园豆:5 [已解决问题] 解决于 2016-11-27 11:55

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”,再试试结果~! 

只求个解释~!

 

附图:

梦再笑的主页 梦再笑 | 初学一级 | 园豆:55
提问于:2016-11-27 00:55
< >
分享
最佳答案
0

这个问题还是挺常见的。

在java中,你代码里的字符串“SUN”编译之后被放到了一个class文件的常量池中,当前main方法所在类被加载之后,“SUN”进入运行时常量池。而你输入的“SUN”采用的是System.in,则存在了本地内存中。

简单的说,你输入SUN之后,内存空间有两分SUN(一份是你的代码,一份是你输入的,二者并不在同一个内存块),而java中“==”操作符,你可以理解为比较的是内存地址,很明显两分“SUN”的内存地址并不一样,所以会出现你所谓“刷新java认知”的现象。

此处你可以将“==”换为.equals()方法,即if(“SUN”.equals(value)),就可以出现你想要的结果了。(可以简单的认为.equals()方法比较的是内容)

 

收获园豆:5
Feng_zhulin | 菜鸟二级 |园豆:329 | 2016-11-27 07:22
其他回答(1)
0

字符串应该是可以直接用==判定的.你打断点调试吧.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-27 09:21

恩 我去试试!

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-11-27 16:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册