java String特性

1 特点

a.字符串的内容永不可变,底层时被final修饰的数组 private final byte[] value;


如果要进行字符串的相加,内存中就会有多个字符串,占用的空间就多,效率低

例如

String str ="a"+"b"+"c";

"a","b","c" 占用三个空间

"a"+"b" 占用一个空间

"ab"+"c"  占用一个空间

这时候可以用StringBuilder类对字符进行操作,它是字符缓冲区,可以提高字符串的操作效率,StringBuilder底层也是一个数组,但是没有被final修饰,可以改变长度,而且操作占用的空间少,始终是一个数组,如果超出了StringBuilder的容量,会自动的扩容,其初始容量为16个字符



StringBuilder 介绍

两种创建方法


append()返回的是self,所以两者的地址相等

跟String的相互转化




b.因为不可变的特点 所以字符串可以共享使用;

c.字符串效果上相当于char[]字符数组 但底层的原理是byte[]字节数组;

d.字符串常量值,程序当中直接写上的双引号字符串,就在字符串常量池当中;

2 创建

字符串的创建分类3种构造方法+一种直接创建


1 .创建空白字符串


2.根据字符数组的内容,创建对象(java的char 是unicode存储的,unicode编码字符集中包含了中文,所以可以存储中文)


3.根据字节数组的内容,来创建对应的字符串;


4 .直接创建(这种也是对象).


3 字符串常量池

首先我们创建一个字符 String str1 ="abc"; 首先他先转化为一个字节数组,再将字节数组的地址保存在字符常量池中的字符对象中,再把池当中的对象地址交给str4,str4指向这个地址(对象不是自己创建的,是字符常量池创建的)

接下来我们再创建一个字符对象 String str2 ="abc";两个字符内容一样,这时候就字符串常量池就会判断,如果字符串内容已经存在的,就不会继续创建字符对象,把str5也指向这个地址

所以当我们对比这两个字符的内容是否相等的时候我们可以用“==”,其他情况“==”我们对比的是地址值

但是如果我们用其他方式构造方法创建的String对象,就不会在字符常量池中创建对象,会单独new一个对象,所以用构造方法创建的对象的两个对象即使内容一致也不会指向同一个地址,这种创建方式如果要对比内容是否相等,则用equals方法.


注意:

使用 字符串的equals时,推荐把常量放在前面


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 1,377评论 0 9
  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的。我们天天就是要...
    二毛_coder阅读 477评论 1 1
  • String String是JAVA中最常用的对象,就是这样一个最常用最普通的对象,当你深入研究时却发现我们并不是...
    luoyoub阅读 413评论 1 0
  • 一、String 类 1、定义: 1、从概念上讲,java字符串就是Unicode字符序列。每个用双引号括起来的字...
    玉圣阅读 1,615评论 0 1
  • 注:都是在百度搜索整理的答案,如有侵权和错误,希告知更改。 一、哪些情况下的对象会被垃圾回收机制处理掉  当对象对...
    Jenchar阅读 3,263评论 3 2