- string字符串 在java.lang包下
String代表是一个字符串,用双引号括起来就是代表一个字符串对象,字符串的值是创建赋值后不能更改的,
字符串的底层是字节数组byte[] 效果是相当于是char[] 数组
字符串的构造方法有:
String() 创建空白字符串
String(char[]) 根据字符数组来创建
String(byte[]) 根据字节数组来创建
String str = “abc” 直接赋值方式创建对象,
String对象特点是
通过new关键字来创建字符串对象,每一次new都是会申请一个内存空间,即使内容是相同的但是内存地址是不同的,
用""双引号创建的字符串对象,只要是字符序列相同,都是同一个String对象 存在字符串池中,也就是说本质上是一个对象,
字符串的比较
使用==做比较时 如果是基本数据类型则比较的内容,如果是引用类型则比较的内存地址值,String是对象啊,所以比较的是…
字符串是对象,他比较内容可以通过一个方法equals()方法来比较,
遍历字符串 要获取到每一个字符,字符串也有下标,从零开始,使用charAt(index)返回索引处的值,
获取字符串的长度是length()方法
Sting中的方法 equals()比较内容,charAt(int index)返回指定索引位置的数值 length返回字符串长度,
StringBuilder可变字符序列,即使内容相同对象也是不同的,注意拼接StringBuilder时就会创建每个字符串都是一个对象,因为他的内容是可变的,为什么是可变呢因为他会存储在多个对象中啊
构造方法String builder() String builder(Str)
append()方法是在一个对象中添加数据返回结果是之前的对象,不会在创建新对象,
reverse()返回相反的字符序列
String与StringBuilder相互转化
1通过toString()方法来实现将StringBuilder转化为String
2通过StringBuilder(String str) 构造方法来将字符串变量转化成StringBuilder
总结一下
String类是不可变字符序列,StringBuilder类和StringBuffer是可变字符序列
String类的底层是final char value[] 指明了内容一旦赋值就不会改变
发现String类中的方法都是返回一个新的对象。
有方法concat()追加 substring()截取,trim()去掉空格,length() charAt() length()equals()
StringBuilder和StringBuffer
底层也是一个char value[] 没有filal修饰可以随时修改,
区别是:Builder是线程不安全,效率高 Buffer是效率低, 安全
append()追加数据
delete(int start,int end)删除指定范围字符,返回仍是一个对象,
insert(int index,String str)在指定位置添加一个字符
reverse() 返回相反字符
- 面试题
java中有哪些类可以操作字符串,特点和使用时注意什么?
string 类 stringbuffer类 string builder类
1.不可变对象 string类 可变 string buffer string builder
2.线程安全 string string buffer 不安全 string builder
3.同步锁 string buffer 没有锁 string builder
4.多线程就用 string buffer 单线程用string builder
5 string 用 + 其他用 append方法追加 - 字符串的比较排序compareto方法
public class StringSort {
public static void main(String[] args) {
/** String类中的compareTo方法用于两种方式进行比较,1.字符串和对象进行比较,2.按字典顺序比较两个字符串,
* 返回的int类型,参数类型可以是对象或是字符串,
* 返回值是一个整数,按照ASCll码顺序来比较大小,如果第一个字符和参数的第一个字符不等,结束比较,
* 返回长度差值,如果第一个字符和第一个相等,那么就是第二个对应第二个来比较,依次类推,退出结果值
*/
System.out.println("a".compareTo("b")); //-1 小 大 负数差值
System.out.println("a".compareTo("a")); //0 1=1 返回0
System.out.println("c".compareTo("a")); //1 大 小 正值差值
}
}
- api
public static void main(String[] args) throws UnsupportedEncodingException {
String demo = "abcdefg";
System.out.println(demo.charAt(0)); //返回指定索引处的值
System.out.println(demo.codePointAt(2)); //返回对应的Unicode代码
String demo1 = "123456";
System.out.println(demo.concat(demo1));//将指定的字符串连接到该字符串的末尾
System.out.println(demo.contains("abc"));
System.out.println(demo.contains("123"));//判断是否包含,包含返回true
System.out.println(demo1.endsWith("6"));//判断是否以指定字符结尾的
System.out.println(demo.hashCode()); //返回字符串的哈希值
System.out.println(demo.isEmpty());//判断长度是否为零 0=true
System.out.println(demo.join(demo1));
System.out.println(demo.replace("a","A"));//替换 oldstr newstr
System.out.println(demo.startsWith("a"));//判断是否以指定字符开头
System.out.println(demo.trim());//删除前头和后尾的空格
System.out.println(demo.substring(1,2));//截取字符串包头不包尾
}