y*******7 发帖数: 99 | 1 String s="abc";
String s1=s+"";
String s2="ab"+"c";
s==s1 false
s和s1为什么不等
s==s2 true
谢谢 |
w****r 发帖数: 15252 | 2 string 在Java里面是 immutable data type, 意思就是一旦建立就不能改了, 所以s1
就会在string pool里面再建一个string,两个reference不一样,而是s2建立的过程
Java回去string pool里面找是否有ABC,如果存在就引用,不存在再新建,所以s和s2是
一个reference
【在 y*******7 的大作中提到】 : String s="abc"; : String s1=s+""; : String s2="ab"+"c"; : s==s1 false : s和s1为什么不等 : s==s2 true : 谢谢
|
y*******7 发帖数: 99 | 3
s1
s1建立在pool上是什么样? "abc"??
【在 w****r 的大作中提到】 : string 在Java里面是 immutable data type, 意思就是一旦建立就不能改了, 所以s1 : 就会在string pool里面再建一个string,两个reference不一样,而是s2建立的过程 : Java回去string pool里面找是否有ABC,如果存在就引用,不存在再新建,所以s和s2是 : 一个reference
|
n*******s 发帖数: 17267 | 4 It is one of java's stupid implementations, but you have to live with it and
you have to agree with people who think they have grasped this core, lol.
【在 y*******7 的大作中提到】 : String s="abc"; : String s1=s+""; : String s2="ab"+"c"; : s==s1 false : s和s1为什么不等 : s==s2 true : 谢谢
|
n*******s 发帖数: 17267 | 5 In general, + always create new string unless it happens at compiler time,
so
in s1=s+"" a new string is created, but in s2="ab"+"c", no new string is
created, based on my poor memory.
【在 y*******7 的大作中提到】 : : s1 : s1建立在pool上是什么样? "abc"??
|
l****r 发帖数: 637 | 6 nm
s1
【在 w****r 的大作中提到】 : string 在Java里面是 immutable data type, 意思就是一旦建立就不能改了, 所以s1 : 就会在string pool里面再建一个string,两个reference不一样,而是s2建立的过程 : Java回去string pool里面找是否有ABC,如果存在就引用,不存在再新建,所以s和s2是 : 一个reference
|
f********x 发帖数: 2086 | 7
s1
s1查找的时候为什么确定 "abc" 不存在?
【在 w****r 的大作中提到】 : string 在Java里面是 immutable data type, 意思就是一旦建立就不能改了, 所以s1 : 就会在string pool里面再建一个string,两个reference不一样,而是s2建立的过程 : Java回去string pool里面找是否有ABC,如果存在就引用,不存在再新建,所以s和s2是 : 一个reference
|
p*****p 发帖数: 379 | 8 JLS规定的:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jl
The String object is newly created (§12.5) unless the expression is a
compile-time constant expression (§15.28).
String s1=s+"";
不是一个 compile-time constant expression,因为s是个变量
同理
String s3 = "bc";
s == "a" + s3 -> false |
f********x 发帖数: 2086 | 9 哦,明白了
关键在于compile time
【在 p*****p 的大作中提到】 : JLS规定的: : http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jl : The String object is newly created (§12.5) unless the expression is a : compile-time constant expression (§15.28). : String s1=s+""; : 不是一个 compile-time constant expression,因为s是个变量 : 同理 : String s3 = "bc"; : s == "a" + s3 -> false
|