设为首页 加入收藏

TOP

Java中的字符串(String)的秘密
2014-11-24 13:15:14 来源: 作者: 【 】 浏览:0
Tags:Java 字符串 String 秘密

Java中的"=="的作用是用来判断两个数据是否相等,无论是8种原生数据类型还是引用类型,引用类型相等也就是指两个引用指向同一个对象,Object类中的equals()方法仅仅是反回(this == Object),所以Object的equals()方法仅仅是判断对象是不是同一个对象,而对于那些继承了Object类而又重写了equals()方法的类,比如说String类,那就要依据具体的equals()方法的实现来判断了.


String类特性与创建过程


1 String是常量,其对象一旦创建完毕就无法改变,当使用“+”拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容,对于java的String来说比软特殊,java中有一个String pool的概念,它是由String这个类单独在栈中维护。


2 采用literal(字面值)方式赋值时(如 Strng str = "strings"),java会查找String Pool(字符串池,由String这个类单独维护)中是否存在"String",如果不存在,则在String Pool中创建一个"strings"对象,然后将String Pool中的这个"strings"对象地址返回来,赋给引用变量str,这样str会指向String Pool中的这个"strings"字符串对象。


3 如果存在,则不创建任对象,直接将String Pool中这个"strings"对象地址返回来,赋给引用。


4 采用 String str = new String("strings")这个方式,首先在String Pool中查找有没有"strings"这个字符串对象,如果有,则不在String Pool中再去创建"strings"这个对象了,直接在heap(堆)中创建一个"strings"字符串对象,然后将堆中这个"strings"对象地址返回来,赋给str引用,导致str指向了堆中创建的这个"strings"字符串对象。


5 如果没有,则首先在String Pool中创建一个"strings"对象,然后再在heap中创建一个"strings"对象,然后将椎中这个"strings"对象的地址返回来,赋给str引用,导致str指向了堆中所创建的这个"strings"对象。参见java.lang.String.intern()方法。


了解了这些就来猜猜下面的例子吧


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇iOS获取一个方法的执行时间 下一篇一步一步走进Linux HOOK API

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: