String类的compareTo()和intern()详解介绍和代码演示

01 int compareTo (String str)

        按字典顺序比较字符串 
     是实现Comparable重写的方法    
          比较是基于字符串中各个字符的Unicode值
          如果第一个相同,则比较后面的
        相同输出为 0   

02 源码

在这里插入图片描述


在这里插入图片描述

输出
6
-19


01 intern() 字符串入池

    jdk6 中
           如果字符串常量池中有  不会方法  返回已有对象的地址
           如果没有  复制一份对象放入池中  返回池中对象的地址
   jdk7及以后
           如果字符串常量池中有  不会方法  返回已有对象的地址
           如果没有 把堆中对象的地址复制一份 放入池中  返回池中的地址(此时池中的地址和 堆中对象的地址是一样的)

02 源码

是vative方法
在这里插入图片描述


03 实例一

入池时常量池中已经存在"a" 直接返回地址

在这里插入图片描述

输出
false


04 实例二

在jdk6中 输出结果为false
在jdk7及以后输出结果为true
在jdk6中 执行第一行代码会在堆中存在"ab"对象 然后调用intern()入池时会在池中创建一个新的对象 所以stringOne和stringTwo执行不同的引用
在jdk7及以后 执行第一行代码会在堆中存在"ab"对象 然后调用intern()入池时会把堆中对象的地址给常量 所以stringTwo的引用和stringOne的引用是同一个

在这里插入图片描述

输出
true


05 实例三

调用intern()时 返回的是stringTwo的地址

输出
false
true

06 实例四

jdk6 中 输出 false true
调用intern()时 字符串常量池中不存在"ab" 所有创建一个"ab"对象返回
jdk7及以后 输出 true true
调用intern()时 字符串常量值池创建一个引用地址 和堆中对象的一样地址是一样的
"ab"也就是字符串常量池的的地址 也就是stringTwo 也就是stringOne

stringTwo指向的和stringOne指向的是一样的
因为字符串常量池中已经存在 "ab"的指向了 就是stringTwo "ab"也就直接指向这引用了
所有stringTwo
在这里插入图片描述

输出
ture

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值