2 u013370108 u013370108 于 2016.04.19 23:17 提问

java代码:为什么输出结果是false?

控制台输入:asdf,为什么结果是false?求Scanner的具体解释

 public class StringTest {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        String s1="asdf";
        String s2=scan.next();
        System.out.println(s1==s2);
    }
}

6个回答

w172087242
w172087242   Ds   Rxr 2016.04.20 14:27
已采纳

因为System.in是标准控制台输入字符流,这样输入的东西都是以流式传输,当控制台读到控制台输入的流后,
会用当前系统默认编码对流进行字符编码获取字符串,形式如String s = new String(byte[], Charset.defaultCharset());
这时候生成的是一个new出来的字符串对象,引用地址就发生了改变,且其值不会出现在字符串常量池中,如果想要值new出来的
string对象的值也进行常量池,可以调用方法intern进行刷入。

希望可以帮到你。

u013370108
u013370108 谢了,懂了
大约 2 年之前 回复
fubo1990
fubo1990   2016.04.20 07:54

String 不属于基本类型。基本类型可以进行==比较。 String是引用类型的。==比较的是对象的地址。equals比较的是两个对象的值。

qinjisheng_11
qinjisheng_11   2016.04.19 23:23

那个比较改成:System.out.println(s1.equals(s2));,这个是比较两个字符串相等,而“==”是比较两个字符串的内存地址是不是相同

zhujuyu
zhujuyu String 为引用类型,所以要比较字面值的话是不能够使用‘==’
大约 2 年之前 回复
qinjisheng_11
qinjisheng_11 回复Chopstickss_: 不好意思,忘了把基本类型的比值除外了
大约 2 年之前 回复
qinjisheng_11
qinjisheng_11 对象的引用,不就是指针,然后是这块内存的地址呀!如有不对请指教
大约 2 年之前 回复
qq_34043294
qq_34043294 回复Chopstickss_: 地址。。
大约 2 年之前 回复
qq_34043294
qq_34043294 回复有节奏的键盘: 你确定==是比较地址??
大约 2 年之前 回复
qq_34043294
qq_34043294 回复有节奏的键盘: 你确定==是比较地址??
大约 2 年之前 回复
oiu1010110
oiu1010110   2016.04.20 00:20

这两个不是同一个对象。

qq_24334403
qq_24334403   2016.04.20 11:16

scan。next获得字符串是new 出来的新串了吧,不会指向常量池的的字符串吧,猜的

u010646502
u010646502   2016.04.20 13:59

字符串比较不能用==

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
echo输出true和false的结果
echo true;//输出值为1     echo false;//输出值为空
为什么输出结果是3
为什么输出结果是3? 为什么输出结果是3?——这是我自学Java时遇到的一个问题,纠结到了兄弟连才找着一个理由,虽然没经过“官方”认证,但我说服我自己了~~~想知道是什么问题?那就往下看。 我们JAVA03班有一种很好的制度,每天请一位学员分享一些知识,可以是任何内容。有的学员讲自家地界风土人情,有的学员介绍与老外不得不说的故事,有的学员进行现场高端访谈,还有经济学、投资学专场……很丰
[] == false,和!![] == false结果为什么不一样?探究 == 本质
console.log([] == false, !![] == false);// true false console.log([] === false, !![] === false);// false false console.log([] == []);// false var a = []; console.log(a == !!a);//fasle 先解析[] == f
Java代码执行顺序-(花1分钟看一下吧)
1.执行的六大原则 1)父类:静态成员赋值,静态代码块 2)子类:静态成员赋值,静态代码块 3)父类:实例成员赋值,实例代码块 4)父类:构造器中的其他方法 5)子类:实例成员赋值,实例代码块 6)子类:构造器中的其他方法 2.下面程序会输出什么? package com.cxx.thread; public class Happy{ s...
数据输出
数据输出 1、使用printf和scanf函数时,要在最前面加上#include“stdio.h” 2、printf可以只有一个参数,也可以有两个参数。(选择题考过一次) 3、printf(“ 第一部分 ”,第二部分  );把第二部分的变量、表达式、常量以第一部分的形式展现出来! 4、printf(“a=%d,b=%d”,12, 34) 考试重点! 一定要记住是将12和34以第一部分的形
关于360笔试题的一个题目的以下代码执行后输出结果为()思考
题目: 以下代码执行后输出结果为() public class Test { public static Test t1=new Test(); { System.out.println("blockA"); } static { System.out.println("blockB"); } public static void main(String[] ar
为什么123 and 456结果是456而123 or 456结果是123?
and:     对于and,首先计算第一个表达式,若为真,                        则计算第二个表达式,若为真,则返回第二个真值。     如:123 and 456 返回456                                   若为假,则返回该假值。       如:123 and 0  返回0
Java中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 true
Java中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 true 4*0.1 == 0.4 返回值 true
Java遍历HashSet为什么输出是有序的?
https://www.zhihu.com/question/28414001
isNaN()对"" 和" " 会返回false
isNaN()验证的时候遇到一些小彩弹: