Java字符串总结

字符串  
Java的的字符串是一个特殊的对象  被final修饰值最终类
他的特点是一旦出初始化值就不可变,默认初始值是null
字符串字面值也是一个对象,是常量存放在方法区的常量池,
String的赋值方式
1 直接赋值 String str="hello";
2 通过new操作符创建对象赋值 String s=new String("hello");
在构造函数中传入字符串 或者StringBuilder 等
两种赋值的区别;
直接赋值法 会拿着"hello"这个常量值在,方法区的常量池(pool)中查找。如果找到常量池中有这个值,就把它的引用指向桟内存的变量str .,如果没有的话,就在常量池中创建hello,在在这个对象的引用指向str。(节约内存空间)
通过new操作符赋值法   在执行new操作时 会在堆内存中开辟一块空间存储"hello"对象,(不管堆内存中是否有同样的对象)(浪费内存)
String  +运算符  在参与+运算的一端只要有字符串,就会执行字符串的连接操作,在底层Java会new一个StringBuilder执行append方法添加字符串,
字符串的比较方式
== 比较   一般用于比较基本数据类型, 如果比较的是类类型是比较的对象引用的地址值(因为String是类类型所以不能用==比较字符串值)

equals 比较 调用equals方法时 ,默认使用的是父类Object的方法进行比较的是地址值,因为String的内部重写了他的equals方法,所以要对String进行比较,因该使用equals方法 (得出结论 如果要进行自定义对象的比较,就要在自定义对象中重写equals方法)

        private final static String MESSAGE = "heima";
        public static void main(String[] args) {
                String a = "hei"+"ma";
                String b = "hei";
                String c = "ma";
                System.out.println(a==MESSAGE);
                System.out.println((b+c)==MESSAGE);
        }
private final static String MESSAGE = "heima";
 String a = "hei"+"ma"; 因为hei   ma  是字面常量值   在编译器编译时,就已经在class文件中写死了 和MESSSAGE他们在常量池中同为同一个值,所以为true而b+c是变量在编译期间无法确定其具体值。Java在操作b+c是其实是调用StringBuilder执行append方法完成字符串的拼接,位于字符串缓冲区
所以最后一条语句放回false
 
字符串缓冲区 StringBuffer是一个容器可以对字符串进行增删查改
很多方法和String相同 但是他的长度可变 最终同过toString f方法转为字符串
字符串缓冲区功能和StringBuffer一样 
StringBuffer 和stringBuilder的区别
StringBuffer jdk1.0出现 线程同步 效率低 适合在多线程中使用
String Builder jdk1.5后出现 线程不同步,效率高 适合多线程
建议多线程中使用StringBuffer 平时单线程使用StringBuilder
String提供一系列的方法供我们操作字符串
获取
int length() 返回一个字符串的长度(单位是字符 不是字节,
因为Java采用的是Unicode编码不管是英文还是中文都是用字符表示)
char CharAt(int index)返回字符串指定位置的字符
int indexOf(int ch)返回的是指定字符在字符串中第一次出现的位置
int indexOf(int ch,int formIndex)返回的是指定字符,从指定位置开始后出现的位置
int indexOf(String str)返回的是str在字符串中第一次出现的位置
int indexOf(String str,int formIndex)返回的是指定字符串,从指定位置开始后出现的位置
int lastIndexOf(int ch) 与indexOf相反从右往左查找,指定字符出现的位置
int lastIndexOf(String str, int fromIndex) 从右往左查找返回的是指定指定字符串出现的位置
判断
boolean contains (CharSequence str)判断字符串中是否包含指定字符 或字符串
但是indexOf 可以查找在字符串中第一次出现的位置,如果没有就返回-1,所以indexOf
既可以返回位置 又可以进行判断是否包含
boolean isEmpty()判断字符串是否为空
  booleanstartsWith(String str)判断字符串是否以指定内容开头
boolean endsWith(String str) 判断字符串是否以指定内容结尾
boolean equals(String str)判断两个字符串是否相同。(String 的equals重写了Object的equals方法)
boolean equalsIgmoreCase(String str);判断内容是否相等,并忽略大小写
1.将字符串转换成大写或小写。String toUpperCase();String toLowerCase();
2.将字符串两端的空格去掉;String trim();
3.对两个字符串进行自然顺序的比较。
boolean compareTo(String);


构造函数:String(char());String(char[],offset,count);将字符数组中的一部分转成字符串。char[]是字符数组,offset是开始位置,count是个数。
Char[] toCharArray() 将字符串转换为char数组;
3.3:将字节数组转成字符串。
String(byte());String(byte[],offset,count);将字字节数组中的一部分转成字符串。char[]是字节数组,offset是开始位置,count是个数。
将字符串转成字节数组。
byte[] getBytes();  特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
将基本数据类型转成字符串。static String valueOf(int);
static String valueOf(double);
替换:String replace(oldchar,newchar);如果要替换子字符不存在,返回的是原串。

切割:String[] split(regex);
subString(int begin )截取指定位置到结尾的子字符串,如果角标不存在 会报角标异常
String substring(begin,end);包含头,不包含尾。
 
常用方法
StringBuffer append()将指定数据添加大已有数据的末尾
StringBuffer insert(int index ,数据)可以讲数据插如指定位置
StringBuffer delete(int start ,int end)删除缓冲区的数据,包头不包尾
delete(0, sb.length) 用于清空缓冲区
StringBuffer  delete(int index)删除指定位置的字符,一个字符
char charAt(int index)获取指定位置的字符
String substring(int start ,int end)截取字符串 注意返回的是String类型
void setCharAt(int index,String str)修改指定位置的字符
StringBuffer reverse() 反转  String没有这个功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值