由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 请教一题
相关主题
问一个java基础的初始化的问题,一直搞不明白 (转载)Recusion is fucking magic!!
初学者code请教 (大牛莫取笑)java多线程问题请教
a simple question折腾了一天,实在是绝望了,请教请教
请问StringBuffer的OutofMemory问题Re: how to initialize corba object orb in servlet
local变量被赋值了几次?java String
有什么办法高效的进行replaceAll两个很基本的JAVA问题
use >>>= with shortjdbc连接数据库出现的问题
Java StringBuilder myth debunked新手求助,急急急!!!
相关话题的讨论汇总
话题: string话题: ab话题: s1话题: s2话题: s0
进入Java版参与讨论
1 (共1页)
h*******a
发帖数: 165
1
代码如下
public class StringRead{
public static void main(String[] args){
String s = args[0];
String s0 = "ab";
if (s == s0) System.out.println("s == s0");
String s1 = "ab";
String s2 = "ab";
if (s1 == s2) System.out.println("s1 == s2");
}
}
编译成功后运行 java StringRead ab (读入"ab"赋值给args)
打印结果是 s1 == s2
为什么 s == s0 return false 但是 s1 == s2 return true?
谢谢!
g*****g
发帖数: 34805
2
It's because "ab"=="ab" but "ab" != new String("ab")

【在 h*******a 的大作中提到】
: 代码如下
: public class StringRead{
: public static void main(String[] args){
: String s = args[0];
: String s0 = "ab";
: if (s == s0) System.out.println("s == s0");
: String s1 = "ab";
: String s2 = "ab";
: if (s1 == s2) System.out.println("s1 == s2");
: }

h*******a
发帖数: 165
3
Got it! Thanks!

【在 g*****g 的大作中提到】
: It's because "ab"=="ab" but "ab" != new String("ab")
d****g
发帖数: 7460
4
这个也就是个偶然吧?不同编译器可能有不同结果的。不觉得specification会要求s1=
=s2

【在 h*******a 的大作中提到】
: Got it! Thanks!
g*****g
发帖数: 34805
5
In hotspot, all literal Strings point to the same instance directly or
indirectly. Not sure that's a spec requirement though.

s1=

【在 d****g 的大作中提到】
: 这个也就是个偶然吧?不同编译器可能有不同结果的。不觉得specification会要求s1=
: =s2

d****g
发帖数: 7460
6
It actually IS guranteed by spec... :( Weird
http://stackoverflow.com/questions/767372/java-string-equals-ve
also, "abc" == "ab" + "c" as well.

【在 g*****g 的大作中提到】
: In hotspot, all literal Strings point to the same instance directly or
: indirectly. Not sure that's a spec requirement though.
:
: s1=

s****s
发帖数: 628
7
为什么 "ab" != new String("ab") ?

【在 g*****g 的大作中提到】
: It's because "ab"=="ab" but "ab" != new String("ab")
F****n
发帖数: 3271
8
Java String *大多数* 指向Constant pool
但由 new String(java.lang.String)生成的String指向新的object
这些是相等的
"aa"
new String({'a', 'a'})
(new StringBuilder("aa")).toString()
这个不等
new String("aa");

【在 s****s 的大作中提到】
: 为什么 "ab" != new String("ab") ?
o**1
发帖数: 6383
9
这叫 Flyweight pattern.
当你直接使用 "ab" 的时候,是建一次以后再使用"ab"都是share同一个 object
节省内存。
所以 "ab"=="ab"
但是 new String("ab") 就是新建一个 object 就不相等了。
符号 == 不是检查 value 是否相等,是检查是否指向同一个 object
建string 的时候都要用 "some string", 不要 new String("ddd")

【在 s****s 的大作中提到】
: 为什么 "ab" != new String("ab") ?
s****s
发帖数: 628
10
你的意思
"aa" == new String({'a', 'a'})
"aa" == (new StringBuilder("aa")).toString()
这两个怎么解释?

【在 F****n 的大作中提到】
: Java String *大多数* 指向Constant pool
: 但由 new String(java.lang.String)生成的String指向新的object
: 这些是相等的
: "aa"
: new String({'a', 'a'})
: (new StringBuilder("aa")).toString()
: 这个不等
: new String("aa");

F****n
发帖数: 3271
11
These two are not created by new String(java.lang.String),
so will point to the constant pool

【在 s****s 的大作中提到】
: 你的意思
: "aa" == new String({'a', 'a'})
: "aa" == (new StringBuilder("aa")).toString()
: 这两个怎么解释?

1 (共1页)
进入Java版参与讨论
相关主题
新手求助,急急急!!!local变量被赋值了几次?
help "java.lang.NoSuchMethodError"有什么办法高效的进行replaceAll
不用main(String args[]),怎样输出"hello world"?use >>>= with short
Re: 怎样不用main(String args[])输出"hello worlJava StringBuilder myth debunked
问一个java基础的初始化的问题,一直搞不明白 (转载)Recusion is fucking magic!!
初学者code请教 (大牛莫取笑)java多线程问题请教
a simple question折腾了一天,实在是绝望了,请教请教
请问StringBuffer的OutofMemory问题Re: how to initialize corba object orb in servlet
相关话题的讨论汇总
话题: string话题: ab话题: s1话题: s2话题: s0