细说String和StringBuffer

一、String类
String定义的字符串常量值不可改变。
String类常用的方法
(1) char charAt(int index) 返回指定索引处的 char 值。
(2) int length()返回字符串长度
(3) int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。若没有出现str字符串,则返回-1;
(4) int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
(5) boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
(6) boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束。
(7)split(String regex) 根据给定正则表达式的匹配拆分此字符串。
(8)boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始。
(9)String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
(10)String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
(11)static String valueOf()将基础的数据类型转化为String类型
示例分析下述代码的输出结果:

public class StringTest {
    public static void main(String[] args) {
       String s1 = "abc";
       String s2 = "abc";
       String s3 = new String("abc");
       String s4 = new String("abc");
       System.out.println(s1==s2);//true
       System.out.println(s3==s4);//false
       System.out.println(s3.equals(s4));//true
    }

}

输出结果

true
false
true

分析内存:
这里写图片描述
String s1 = “abc”;字符串常量“abc”定义在数据区,String s2 = “abc”;编译器自动优化,s2也会指向同一块数据区。因此s1==s2为true;s3和s4分别指向不同的对象,所以s3==s4为false;String类重写了Object的equals方法,比较的是String对象(内容),因此s3.equals(s4)为true;
习题:统计某个单词出现的次数

public class CountTest {
    public static void main(String[] args) {
       String str = "java_java_javadsdsjava_java";
       int count = 0;
       int index = 0;
       while((index = str.indexOf("java"))!=-1){
           count++;
           str = str.substring(index+4);//截串
       }
       System.out.println(count);
    }

}

二、StringBuffer类
StringBuffer是一种容器,代表可变的字符串,StringBuffer可对字符串长度作出改变。
特点:
1、长度可变
2、可以操作多个数据类型(数组存储数据类型一致)
3、调用toString方法变成字符串。
一个常见的字符串操作:

String s1 = "hello";
String s2 = "world";
s1+=s2;

内存模型:
这里写图片描述
在来看StringBuffer

        String s1 = "hello";
        String s2 = "world";
        StringBuffer sb = new StringBuffer(s1);
        sb.append(s2);

其内存模型
这里写图片描述

注意StringBuffer没有重写Object的equals方法和hashCode方法。
几个常见方法说明:
(1)存储。
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
(2)删除。
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
(3)获取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end) 返回的是String类型;
(4)修改。
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
(5)反转。
StringBuffer reverse();逆序操作
(6) 将缓冲区中指定数据存储到指定字符数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

StringBuffer是线程同步。StringBuilder是线程不同步。
升级三个因素:
(1)提高效率。
(2)简化书写。
(3)提高安全性。
以后开发使用StringBuilder。强调:注意StringBuilder没有重写Object的equals方法和hashCode方法。
四、.基本数据类型及包装类:
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用,
就是用于基本数据类型和字符串类型之间做转换
字符串转成基本数据类型。
xxx a = Xxx.parseXxx(String);
int a = Integer.parseInt(“123”);
double b = Double.parseDouble(“12.23”);
boolean b = Boolean.parseBoolean(“true”);
Integer i = new Integer(“123”);
int num = i.intValue();
十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制: parseInt(string,radix);
JDK 1.5版本以后可以自动装箱。
Integer x = 4;//自动装箱。//new Integer(4)
x = x/* x.intValue() */ + 2;
x 进行自动拆箱。变成成了int类型。和2进行加法运算,再将和进行装箱赋给x。

     Integer m = 128;
     Integer n = 128;
     System.out.println("m==n:"+(m==n)); //falses

      Integer a = 127;
      Integer b = 127;
      System.out.println("a==b:"+(a==b));//结果为true。a和b指向了同一个Integer对象。因为当数值在byte范围内容(-128~127),对于新特性,如果该数值已经存在,则不会再开辟新的空间。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值