java语法学习(2)String 类 与 StringBuffer类

String 类 与 StringBuffer类

1.String 类

String 变量名 = 字符串;
String 变量名 = new String (字符串)
String 变量名 = new String (字符数组)

当定义字符串常量的时候,jvm首先会在字符串常量池中,看有没有该字符串,通过equals 来确定是否有,如果存在,就将该字符串对象的引用返回给前面的定义字符串常量时的左边的变量,如果常量池中不存在就创建该对象,然后将对象的引用返回。

当使用new(使用构造函数的时候不是一般要在构造函数内放置一个值,来初始化对象嘛) 创建字符串对象时,jvm首先会在常量池中查找有没有该值的对象,如果有,就在堆中创建该对象,然后将堆中的对象的引用返回,而堆中的对象的值和常量池中的对象的值是同一个,如果没有,就在堆中和常量池中都创建一个对象,堆中的对象中的值和常量池中的对象的值相同,然后将堆中的对象的引用返回。

String c = new String("chenssy");

虽然c的内容是创建在堆中,但是他的内部value还是指向JVM常量池的chenssy的value,它构造chenssy时所用的参数依然是chenssy字符串常量。

 String s0="helloworld"; 
    String s1=new String("helloworld"); 
    String s2="hello" + new String("world"); 
    System.out.println("===========test4============");
    System.out.println( s0==s1 ); //false  
    System.out.println( s0==s2 ); //false 
    System.out.println( s1==s2 ); //false

因为在编译的时候无法确定 s2 的值,安装s2的这种方式,会像 new String(“helloworld”) 一样在堆中创建一个新的对象然后返回,所以s0,s1,s2就全是不同的对象反之如果能在编译时确定值,那么该变量内存的是常量池中该对象的地址

String s = "4";
String s1 = "1" + s;// 这样也无法在编译时确定;
如果
final String s = "4";
String s1 = "1" + s;//是可以在编译时确定的

String 类型与C++中的string 类似
字符串的基本操作:

解释函数格式
1.字符串的长度int lengh()
2.字符串的第index 个字符char charAt(int index-1) // 下标是从0开始的
3.指定字符第一次出现处的索引int indexOf(int ch) 这里 int ch 是 输入字符的对应的ASCII码
4.指定字符最后一次出现处的索引int lastIndexOf(int ch) 这里 int ch 是 输入字符的对应的ASCII码
5.指定子字符串第一次出现处的索引int indexOf(String ch)
6.指定子字符串最后一次出现处的索引int lastIndexOf(Stringch)

字符串的转换操作

解释函数格式
1.将字符串转换为字符数组char [] toCharArray()
2.String 中的字符全部转换为小写String toLowerCase()
3.String 中的字符全部转换为大写String toUpperCase()
4.返回参数的字符串表示形式static String valueOf(int i)

字符串的替换和去除空格操作

解释函数格式
1.去除字符串两端的空格的函数String trim()
2.替换函数可以达到这个目的String replace(CharSequence oldstr,CharSequence newstr) 用newstr换oldstr

字符串的判断操作

解释函数格式
1.判断是否是以指定字符串开头boolean startsWith(string s)
2.判断是否是以指定字符串结尾boolean endsWith(string s)
3.判断是否存在指定字符串boolean contains(CharSequence cs)
4.判断字符串是否为空boolean isEmpty()
5.判断两个字符串是否相等boolean equals(Object s)

字符串的比较可以通过 == 和 equals()两种方式进行,不过 == 比较的是两个字符串的地址是否一样而 equals() 比较的是两个字符串中的字符值是否相等

字符串的截取与分割

解释函数格式
1.从数字a起始的角标开始,直到此字符串的末尾的所有字符String substring (int a)
2.从数字a起始到数字b-1结束String substring (int a,int b)
3.根据参数将字符串分割为若干个子字符串String [] split(String regex)

2.StringBuffer 类

StringBuffer类与String类的区别
String 类是 final 类型的,所以其一旦创建就不能改变其内容和长度,String 对象可以用 + 连接, 并且重写了 Object 类中的equals()方法,StringBuffer类也称字符串缓冲区,类似于一个字符串容器,可以改变其内容,而StringBuffer 不能用+连接,且不能用equals()方法
创建方法和类对象的创建差不多
常用方法:

解释函数格式
1.添加字符到StringBuffer对象中末尾StringBuffer append(char c)
e.g :     StringBuffer sb = new StringBuffer(); sb.append("123"); 即可
解释函数格式
2.在a位置插入字符串StringBuffer inser(int a,String str)
e.g:     sb.insert(3,"45");    sb = "12345";
解释函数格式

3.移除指定位置的字符串 StringBuffer deleteCharAt(int index)

e.g:     sb.delete(0) ; sb = "2345";
解释函数格式
4.将指定范围的字符或字符串用字符串s进行替换StringBuffer replace(int start,int end, String s)
e.g: sb.replace(2,4,'AB'); sb = "23AB";
解释函数格式
5.修改指定位置a 处的字符,修改为Avoid setCharAt(int a, char A)
e.g:    sb.setCharAt(2,'4');    sb = "234B";   
解释函数格式
6.返回StringBuffer缓冲区中的字符串对象String toStirng()
7.将此StringBuffer对象用其反转形式取代StringBuffer reverse()

补充:

与StringBuffer 功能相似的 StringBuilder ,方法基本相同,不过仍有差距StringBuffer 是线程安全的,而StringBuilder 则不是,如果创建一个内容可变的字符串对象,应该优先考虑StringBuilder 类

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dearzcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值