Kotlin/Java中String的equals和==
在Java中,如果定义一个常量String和new出一个String对象,是不同的:
String s1 = "zhang"
String s2 = new String("zhang")
因为在Java看来,s1只是一个常量,会放在方法栈内存区,而s2是对象,是创建在堆内存上的。特别注意:从JDK7开始,常量池的实现已从方法区中移放到堆内存。
import java.nio.charset.Charset
fun main(args: Array<String>) {
val target = "zhang"
val s1 = "zhang"
val s2 = String("zhang".toByteArray(Charset.defaultCharset()))
val s3 = StringBuffer("zhang")
println("$target $s1 $s2 $s3")
println(target.equals(s1))
println(target == s1)
println("-")
println(target.equals(s2))
println(target == s2)
println("--")
println(target.equals(s3))
println(target == s3.toString())
}
String在Java/Kotlin中比较特殊,String不像其他常规基础变量。每次Java/Kotlin定义/创建一个String后,如果String内存缓存池内不存在给定值比如"zhang"相同的String对象,那么此时Java将为此创建新的String对象,并存放在String缓存池内。如果String缓存池内存中有与指定值相同的String对象,那么此时Java将不创建新String对象,而直接返回已存在的String对象的引用。
Java的字符类String、StringBuffer与StringBuilder异同对比分析_string类的字符串与stringbuffer类的字符串判断是否相同-CSDN博客文章浏览阅读6.3k次,点赞16次,收藏67次。Java的字符类String、StringBuffer与StringBuilder异同对比分析Java String是一个“不可变常量字符串”对象,final属性定义。之所以这么说,是从String内部在盛放字符串时候的容器char数组而言。比如当用户在初始化阶段定义了一个String对象String s=”hello,world!”,而此时再次对s进行操作改变s的值时候,如再次给s赋值使得s=”_string类的字符串与stringbuffer类的字符串判断是否相同https://blog.csdn.net/zhangphil/article/details/78393529
https://zhangphil.blog.csdn.net/article/details/136518838https://zhangphil.blog.csdn.net/article/details/136518838https://zhangphil.blog.csdn.net/article/details/136516174https://zhangphil.blog.csdn.net/article/details/136516174