细说String和StringBuffer

原创 2015年07月09日 23:39:00

一、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),对于新特性,如果该数值已经存在,则不会再开辟新的空间。
版权声明:本文为博主原创文章,未经博主允许不得转载。

常见对象_StringBuffer的两个小面试题、String和StringBuffer分别作为参数传递

package cn.itcast_08; /* * 面试题 * 1:String,StringBuffer,StringBuilder的区别? * A:String是内容不可变的,...
  • L1585931143
  • L1585931143
  • 2016年11月16日 22:15
  • 787

常见对象_StringBuffer和String的相互转换

package cn.itcast_07; /* * 为什么我们要类之间的转换: * A -- B的转换 * 我们把A转换为B,其实是为了使用B的功能。 * B -- A的转换 ...
  • L1585931143
  • L1585931143
  • 2016年11月15日 21:13
  • 467

Java基础之String、StringBuffer与StringBuilder的区别及应用场景

1 String、StringBuffer与StringBuilder (1)String 字符串常量; /** Strings are constant; their values cann...
  • chenliguan
  • chenliguan
  • 2016年07月14日 18:35
  • 5877

Java String为什么是不可变类,StringBuffer与StringBuilder区别

熟悉Java的都知道String类是不可变,但String类为什么设计成不可变类,如何做到不可变没有仔细想过。 String为什么设计成不可变类? 1.Java字符串池的设计方式。     Strin...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月10日 15:15
  • 2040

Java中字符数组、String类、StringBuffer三者的相互转换

一、StringBuffer与String的相互转换 1、将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型。 String...
  • strggle_bin
  • strggle_bin
  • 2017年04月07日 15:06
  • 2385

String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?

本内容是我从各处转载整理得来,是我的学习笔记,如有涉及到版权问题,请给我留言。 或者内容中有不正确的地方,也请各位大神能帮我指出更改,谢谢! 一、区别 1、String是字符串常量,而String...
  • dorapan1987
  • dorapan1987
  • 2015年03月17日 20:36
  • 873

String和StringBuffer类型数据进行参数传递问题

1.String和StringBuffer做为形参传递 通常参数传递有两种:                 基本类型:不会影响实际参数的值                 引用类型:会影响实际参数的...
  • xiaofei__
  • xiaofei__
  • 2016年11月02日 14:36
  • 1109

基于面试题String与StringBuffer区别引出的简单深入

String,StringBuffer以及StringBuilder区别分析以及测试 本篇的个人理解也是站在巨人的肩膀上进行了个人的总结,同时对部分源码的简单分析...
  • C_freedomc
  • C_freedomc
  • 2016年09月06日 17:13
  • 490

黑马程序员——Java基础---String、StringBuffer和正则表达式

主要介绍了String、StringBuilder以及正则表达式的写法。
  • qq_23868283
  • qq_23868283
  • 2014年11月26日 17:43
  • 638

StringBuffer的常用方法与操作

stringbuffer的常用方法与操作
  • hoho_12
  • hoho_12
  • 2016年04月13日 20:30
  • 1367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:细说String和StringBuffer
举报原因:
原因补充:

(最多只允许输入30个字)