Java String 字符串

来源:互联网 发布:巨灵数据 金融界 编辑:程序博客网 时间:2024/06/05 22:51

String字符串的使用方式

  • 直接赋值的方式:String str = “hello”;

  • 生成对象的方法:String str = new String(“hello”);

  • 两种方式的比较:

    代码: String str =new String("hello");

    因为首先因为”hello”该字符串,需要在堆内存中开辟一块空间存放
    有了”hello”已在堆内存的空间后,又去new 出 新的一块空间存放”hello”,再被str指向
    而没有被指向的第一个的”hello”等待被回收。

    这里写图片描述

  • 由此可知:
    一般情况下,String str = new String(“hello”); 通过new方式来生成字符串对象实际上开辟了两个空间来储存字符串,而其中的一个是没用的。 所有使用直接赋值的方式比较多。

String字符串的比较方式

  • 双等==的方式:比较两个字符串的内存空间的地址

  • equals的方式 : 比较两个字符串的内容

String字符串的内容不可更改

  • 分清 引用/地址 与 内容 : String str = “hello” :”hello”为内容,str为引用/地址,str指向存储”hello”这块内存空间。

  • String str = “hello”; str = “hi”;由字符串的内容不可更改,堆内存开辟了两块空间,一块存”hello”一块存”hi”,而str先指向”hello”后指向”hi”.

  • 一旦创建了String对象那么是不能改变的。如果有必要修改字符的字符串,那么应该使用 String Buffer & String Builder 类.

String字符串的常用方法

  • 字符串的长度:length()方法

  • 字符串转换为字符数组:toCharArray()方法

  • 从字符串中取出指定位置的字符:charAt()方法 (这样一来,如果只是取字符,没必要先将它转为字符数组了)

  • 字符串转换为byte数组:getBytes()方法

  • 过滤字符串中存在的字符,判断有没有某字符,没有返回-1,有返回该字符在字符串中的位置。indexOf();

  • 去掉字符串的前后空间:trim();方法:只针对字符串的前后空格。

  • 连接字符串:str = str1.concat(str2)str1 += str2

  • 创建格式化字符串:

    String fs;fs = String.format("The value of the float variable is " +           "%f, while the value of the integer " +           "variable is %d, and the string " +           "is %s", floatVar, intVar, stringVar);

StringBuffer的使用

  • StringBuffer字符串的缓冲区,其字符串内容是可以更改的(不需要开辟新的内存空间,不需要新的指向)。
StringBuffer strb = new StringBuffer("hi");strb.append("hello"); //尾部追加方法strb.reverse(); //颠倒方法
  • 通过方法体可达到更改缓冲区中字符串内容的效果。

- 常用方法

public StringBuffer delete(int start, int end) //删除一定区间的字符start -- 开始的索引(包括)。end -- 结束索引(不包括)。StringBuffer sb = new StringBuffer("abcdefghijk");sb.insert(3,"123"); //插入方法,可规定插入的位置System.out.println(sb); StringBuffer sb = new StringBuffer("abcdefghijk");sb.replace(3, 8, "ZARA"); //替换方法,end -- 结束索引(不包括)。实际先删除对应区间的字符,再进行插入字符串System.out.println(sb); 
  • StringBuffer相比于String的优势
    优势在于:一般情况下,用StringBuffer进行字符串的拼接时,不需要进行新开辟空间存在新的字符串,而String每次都要开辟新的内存空间存放新的字符串。

StringBuilder的使用

  • StringBuider跟StringBuffer是极其相像的,是一个可变的字符序列,该类设计作为StringBuffer的一个简易替换,用于字符串缓冲区被单个线程使用的时候。其速度比StringBuffer快。而涉及多线程/线程安全时,建议使用字符串缓冲区StringBuffer类.

  • 单线程推荐使用StringBuilder,因为它比StringBuffer的速度更快。但是,如果线程安全是必要的最好的选择StringBuffer对象。

  • 常用方法与StringBuffer的类似。

String总结

String 是一个final类,不能被继承,实例值不能被改变。

StringPool(字符串池)不会重复存在相同内容的字符串对象。
s.intern() == t.intern() <=> s.equals(t)

String str = “aaa”
字面值赋值:检查字符串池里有没有对应内容的对象,没有就在池中创建新的字符串对象并返回新对象的地址;有就已经有的字符串对象地址返回。

String str = new String(“aaa”) new
赋值:先在StringPool中查询有没有”aaa”内容的对象,有的话,再在堆中创建一个”aaa”对象,将在堆中创建的字符串对象地址返回;没有的话,首先在StringPool创建一个”aaa”对象,再在堆中创建一个”aaa”对象,将在堆中创建字符串对象的地址返回。

java中字符串的拼接:+
拼接字符串时,会生成新的String对象,而不是向原有的对象追加内容,也不会去字符串池里查找
String s5 = s1+s2; //产生新的字符串
String s6 = “hel”+”lo”;//编译优化为 String s6 = “hello”,相当于字面值赋值。

0 0
原创粉丝点击