Java常用API之String
API(application programming interface)应用程序编程接口.Java API指的就是JDK中提供的各种功能的java类.
String类的API:
“abc”是String类的一个实例,或者称为String类的一个对象
字符串字面值”abc”也可以看成是一个字符串对象.
字符串是常量,一旦被赋值,就不能被改变.
字符串本质是一个字符数组.
String类的构造方法:
String(String original);把字符串数据封装成字符串对象.
String(char[ ] value);把字符数组的数据封装成字符串对象.
String(char[ ] ,int index,int count);把字符数组中的一部分数据封装成字符串对象.第index个开始的count个字符.
注意:一般引用数据类型,直接输出对象就是输出该对象的地址值.但是字符串作为比较特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据.
字符串的内容是被存储在方法区中的常量池中的,是为了方便字符串的重复使用.
直接赋值字符串对象和通过构造方法创建出来的字符串对象的区别.
通过构造方法创建字符串对象是在堆内存中.(即new出来的对象都是在堆内存中)
直接赋值方法创建对象是在方法区的常量池中.
Object是类层次结构中的根类.所有的类都直接或者间接的继承自该类.
如果一个方法的形式参数是Object,那么这里我们就可以传递他的任意的子类对象(多态).
String的判断方法:boolean equals(Object obj):比较字符串的内容是否相同
Boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
Boolean startsWith(String str):判断字符串对象是否以指定的str开头。
Boolean endsWith(String str);判断字符串是否以指定的str结尾。
String的获取方法:int length():获取字符串的长度,其实也就是字符个数
Char charAt(int index):获取指定索引处index位置的字符
Int indexOf(String str):获取str在字符串对象中第一次出现的索引。
String substring(int start):从start开始截取字符串
String substring(int start,int end)从start(包)开始,到end(不包)结束截取字符串。
String与其他的转换:char[] toCharArray();把字符串转换为字符数组
String toLowerCase();把字符串转换为小写字符串
String toUpperCase();把字符串转换为大写字符串.
去除字符串两端的空格:String trim();
按照指定符号分割字符串: String[] split(String str)
String和StringBuilder
StringBuilder是一个可变的字符串.字符串缓冲区类.
String的内容是固定的,StringBuilder的内容是可变的.
一般使用字符串的时候不使用+=.太消耗内存.因为每次拼接都会产生新的字符串对象,而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器.
StringBuilder
构造方法:StringBuilder();
成员方法;
Public int capacity();返回当前容量(理论值)
Public int length();返回长度(已经存储的字符个数)
Public StringBuilder append(Object obj);添加数据,并返回自身对象.
Public StringBuilder reverse();反转功能.(字符串反转功能实现.)
StringBuilder和String的相互转换:
StringBuilder---String
Public String toString();通过toString()可以将StringBuilder对象转换成String对象.
String----StringBuilder
StringBuilder(String str);通过构造方法就可以实现把String转换成StringBuilder.
Tips:StringBuilder和StringBuffer;
String是字符串常量(在不断的创建对象,GC回收垃圾中),StringBuilder和StringBuffer是字符串变量.
StringBuilder是线程不安全的,执行效率非常高.
StringBuffer是线程安全的,执行效率相对StringBuilder低,但是对String还是相当高的.
当我们在字符串缓冲去被多个线程使用时,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的.当然大多数情况下就是我们是在单线程下进行的操作.所以大多数情况下是建议用StringBuilder而不是StringBuffer的,就是速度的原因.
So: 操作少量的数据用String
单线程操作字符串缓冲区下大量数据 StringBuilder
多线程操作字符串缓冲区下操作大量数据 StringBuffer