浏览 2455 次
锁定老帖子 主题:java中String对象
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-18
最后修改:2011-07-18
我想问的是通过Scanner得的对象是new 出来的新对象? public static void main(String[] args) { String s1=new Scanner(System.in).next(); String s2="test"; String s3="test"; System.out.println("s1==s2 "+(s1==s2)); System.out.println("s1.equals(s2) "+s1.equals(s2)); System.out.println(s2==s3); } 输出结果 test s1==s2 false s1.equals(s2) true true 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-18
都是不怕做题的淫呐
csdn上每月两次的问题 |
|
返回顶楼 | |
发表时间:2011-07-20
xyfwjk 写道 这里得到的String对象是不是一个新的?
我想问的是通过Scanner得的对象是new 出来的新对象? public static void main(String[] args) { String s1=new Scanner(System.in).next(); String s2="test"; String s3="test"; System.out.println("s1==s2 "+(s1==s2)); System.out.println("s1.equals(s2) "+s1.equals(s2)); System.out.println(s2==s3); } 输出结果 test s1==s2 false s1.equals(s2) true true S2 S3的test来自常量池,引用地址一样,所以true, 你通过输入流获取的字符串,不是从常量池拿出来的 引用地址不一样 所以是FALSE; |
|
返回顶楼 | |
发表时间:2011-07-20
xyfwjk 写道 这里得到的String对象是不是一个新的?
我想问的是通过Scanner得的对象是new 出来的新对象? public static void main(String[] args) { String s1=new Scanner(System.in).next(); String s2="test"; String s3="test"; System.out.println("s1==s2 "+(s1==s2)); System.out.println("s1.equals(s2) "+s1.equals(s2)); System.out.println(s2==s3); } 输出结果 test s1==s2 false s1.equals(s2) true true new 出来的对象是在堆里面,而用=分配的对象是在常量池里面,java编译器会把所有相同的String指向常量池里同一个对象,所以引用是相同的。 可以调用String.intern()得到常量池的引用。 s1.intern()==s2 返回就是true了。 |
|
返回顶楼 | |
发表时间:2011-07-20
我总觉得这种题目没太多必要研究,记得用equals方法就行……
说真的,没感觉出来==这种比较在非primitive类型里有什么必要使用(仅java) |
|
返回顶楼 | |
发表时间:2011-07-21
equals 和==的区别而已~
|
|
返回顶楼 | |
发表时间:2011-07-21
xyfwjk 写道 这里得到的String对象是不是一个新的?
我想问的是通过Scanner得的对象是new 出来的新对象? public static void main(String[] args) { String s1=new Scanner(System.in).next(); String s2="test"; String s3="test"; System.out.println("s1==s2 "+(s1==s2)); System.out.println("s1.equals(s2) "+s1.equals(s2)); System.out.println(s2==s3); } 输出结果 test s1==s2 false s1.equals(s2) true true 既然输出 s1==s2 flase 那肯定不是常量池里的变量。记住 java编译器在编译期间遇到引用都会无法确定变量,对于s1 == s2 都会是false。除非 s1是final关键字修饰的常量,后面通过引用才会输出true |
|
返回顶楼 | |
发表时间:2011-07-21
哈哈,哈哈哈,这问题...
|
|
返回顶楼 | |