String字符串深入学习之最熟悉的陌生人

     对于字符串,我们很清楚它的作用,也在程序中大量使用了字符串,可是你知道吗,字符串里面的学问可大的很,想看看原因吗,请接着看,你一定会发现,原来字符串还有这种骚操作啊,以前都不知道(大佬除外)。

 

String对象的两种创建方式

      String str1="你好";

      String str2=new String("你好");

以上两种创建方式大家应该都不会陌生,经常使用,接下来 我们打印一下结果吧

What??  false的吗,明明内容一样啊,来自黑人的一脸懵逼,什么原因呢,接下来看看吧。

  这两种不同的创建方法是有差别的,第一种方式是在常量池中拿对象,而第二种方式是直接在堆内存空间创建一个新的对象。(画的可能有点丑 别介意)

   

好了,从上图我们发现了Str1它从常量池去拿的内容,而Str2直接在堆内存空间创建了一个新的对象,所以这两个地址当然不一样啦。说到这  你肯定会说 这么简单  懂了?, 不不不,下面还有更加骚的操作 等着各位大佬们,闲话不多讲,废话不多说,直接进入主题。

      2.String类型的常量池比较特殊。它的主要使用方法有两种:

String  str1="你好" :该方式String会直接存储在常量池中。

如果直接使用String str1=new Strint("你好");  可以使用String提供 intern()方法,它的作用是:如果运行时常量池中已经包含一个等于此String对象内容的字符串,则返回常量池中该字符串的引用;如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。  上代码!!!此处应该有背景音乐:Can you fi  连???

    

 以上看到很清楚哈,如果还不明白 堆和常量池的  可以看看最上面那个图,盯死了看那种。

        3.String字符串拼接:

我们会发现一个规律,就是常量池和常量池中的String对象对比 就是为true      常量池和堆中的对比为false。记住这个规律就行

原理图:

 所以 我们会发现,多个字符串拼接时候 会重新创建对象,这样既耗时,又浪费资源。那怎么改变字符串呢,我们可以使用StringBuilder或StringBuffer进行字符串拼接操作。具体的用法,大家可以查看API

 

接下来在看看8中包装类和常量池吧。

    Java基本类型的包装类中大部分都实现了常量池技术,即Byte、Short、Integer、Long、Character、Boolean这5种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。

  两种浮点数类型的包装类Float、Double并没有实现常量池技术。

   以Integer为例子,我们敲一串代码验证下,发现超出了127后 地址就不一样的,所以为false  所以验证了 上面的道理,所以当超过这个范围 就会创建新的对象,所以就是地址不一样了。

   再次分析一下:

    Integer也可以使用new  那么我们试试new的和不new的意思是什么样的呢。 

     Integer i1=40 Java在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40) 从而使用常量池中的对象。

     好了 看到这里我知道你又晕了,明明上面如果没超过[-128,127]这个范围,怎么又为false了呢。因为注意 你使用了new 在上面字符串常量池 我们就说了 你new一下 就相当于创建了一个新对象, int1 和int2 是从常量池中取出来的,而

记住:只要使用 new 方法,便需要创建新的对象。新对象的地址 是新地址。地址不同就是false。

 

总结:每次我看视频学习 看到老师说到总结时候开心不得了,因为我知道,这该死的知识点终于跑完了,然后剩下一脸懵比 晕乎乎的我,怎么说呢,其实越简单的东西 里面原理越多,可能这些东西你现在觉得没什么用,但是将来会有大作用

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值