代码拉取完成,页面将自动刷新
string是不可变类,一旦String对象被创建,包含在对象中的字符序列(内容)是不可变的,知道对象被销毁。
常量池:JVM中独立的区域存放字符串常量和基本类型常量(public static final)。
String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后。就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的。
String对象比较:
1. 单独使用""引号创建的字符串都是常量,编译期就已经确定存储到常量池中;
2. 使用new String("")创建的对象会存储到堆内存中,是运行期新创建的;
3. 使用只包含常量的字符串连接符如"aa"+"bb"创建的也是常量,编译期间就能确定,已经确定存储到常量池中;
4. 使用包含变量的字符串连接符如"aa"+s1创建的对象是运行期才创建的,存储在堆
String方法:
方法 | 解释 |
---|---|
String() | 初始化一个新的String对象,使其表示一个空字符串序列,并不是返回空(不等于null) |
char charAt(int index) | 取字符串中指定位置的字符,index 从 0 开始计算 |
boolean equals(Object obj) | 将该字符串与指定对象比较,若二者包含的字符序列相等返回true; |
int indexOf(String str) | 找出 str 字符串在该字符串中第一次出现的位置 |
int indexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 |
int lastIndexOf(String str) | 返回指定子字符串在此字符串中最后一次出现处的索引 |
int length() | 返回当前字符串长度 |
String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的 |
boolean startsWith(String prefix) | 测试此字符串是否以指定的前缀开始 |
String[] split(String regex) | 把字符串按指定的字符串分隔开 |
String substring(int beginIndex) | 返回一个新字符串,它是此字符串的一个子字符串 |
char[] toCharArray() | 将此字符串转换为一个新的字符数组 |
String toLowerCase() | 将此 String 中的所有字符都转换为小写 |
String toUpperCase() | 转成大写 |
static String valueOf(基本类型 obj) | 把基本类型值转成字符串 |
String trim() | 忽略字符串前导空白和尾部空白 |
StringBuffer与StringBuilder:
String是不可变类,对象中的字符序列不可变,而StringBuffer与StringBuilder是可变类。
距离说明这两个类的好处:(不用每次新建对象,效率高)
public class Demo1{
public static void main(String[] args){
String s = "";
long begintime = System.currentTimeMillis();
for(int i = 1; i <= 100000; i++){
s+=i;
}
long endtime = System.currentTimeMillis();
long time = endtime - begintime;
System.out.println("运行时间:"+time);
StringBuffer s1 = new StringBuffer();
s = "";
bengintime = System.currentTimeMillis();
for(int i = 1; i <= 100000; i++){
s = "" + 1;
s1 = new StringBuffer(s);
endtime = System.currentTimeMillis();
time = endtime - begintime;
System.out.println("运行时间为:"+time);
}
}
}
输出:
运行时间为:82922
运行时间为:15
可以看出:StringBuffer效率相当高
StringBuffer:是线程安全的;
StringBuilder:是线程不安全的,性能高(比StringBuffer性能要高),当频繁对字符串进行操作时推荐使用StringBuilder(多线程编程除外)。
StringBuilder类常用方法:
方法 | 说明 |
---|---|
StringBuilder append(参数) | 追加内容到当前StringBuilder对象的末尾 |
StringBuilder insert(位置,参数) | 将内容插入到StringBuilder对象的指定位置 |
String toString() | 将StringBuilder对象转换为String对象 |
int length() | 获取字符串的长度 |
**例题:**编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为{1,2,3}的数组形成内容为"1,2,3"的字符串。
public class Demo2 {
public static void main (String[] args) {
int []i = {1,2,3,4,5};
StringBuilder sb = new StringBuilder();
for (int j : i){
sb.append(j).append(",");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。