文章目录
- String类
- 常用方法
- 可变字符串
String类
- 字符串是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
-
String s = "Hello";
产生一个对象,字符串池中存储。String s = new String(“Hello”);
产生两个对象,堆、池各存储一个。
package string;
public class textMethod {
public static void main(String[] args) {
String str1 = "Hello World,w"; //引用变量,指向字符串所在的常量池
str1 = "java"; //重新指向一个常量池
String str2 = new String("java"); //引用变量指向堆,堆指向常量池
String str3 = "java";
System.out.println(str1);
System.out.println(str2);
//简单理解:equals比较的是具体的值,==比较的是地址
System.out.println(str1==str2);//F
System.out.println(str1.equals(str2));//T
System.out.println(str1==str3);//T
System.out.println(str1.equals(str3));//T
}
}
java中的堆、栈和常量池 堆:存放所有new出来的对象
栈:存放基本类型的变量数据和对象的引用
常量池:存放基本类型常量和字符串常量
java面试题之equals和==的区别 我没有重写equals方法,默认可以理解为equals比较的是具体的值,==比较的是地址。
常用方法
通常就是以字符串常量.方法名(参数)
的当时调用:
- public int length():返回字符串的长度。
- public char charAt(int index):根据下标获取字符。
- public boolean contains(String str):判断当前字符串中是否包含str。区分大小写
- public lxhar[] toCharArray() :将字符串转换成数组。
- public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。 - public String trim() :去掉字符串前后的空格。
- public String toUpperCase() :将小写转成大写。
- public boolean endWith(String str):判断字符串是否以str结尾。
- public String replace(char oldChar, qar newChar);将旧字符串替换成新字符串
- public String[] split(String str):根据str做拆分。
package string;
import java.util.Arrays;
import java.util.Locale;
public class textMethod {
public static void main(String[] args) {
String str1 = " Hello World,";
String str2 = "java";
System.out.println(str1);
System.out.println(str2);
System.out.println(str1.length());//字符串长度
System.out.println(str1.charAt(3));//根据下标获取字符,类似str1[3](Java不可用这种方法)
System.out.println(str1.contains("Hello"));//判断是否包含,需要区分大小写
System.out.println(str1.indexOf("Wor"));//首次出现下标
System.out.println(str1.endsWith("d,"));//是否结尾
System.out.println(Arrays.toString(str1.toCharArray()));//字符串转换为数组
System.out.println(str1.trim());//去掉前后空格
System.out.println(str1.toUpperCase(Locale.ROOT));//大小写转换
System.out.println(str1.replace("World", "Java"));//字符串替换
String arr[] = str1.split(" ");//拆分
for (String s : arr) {
System.out.println(s);
}
}
}
/*
Hello World,
java
13
l
true
7
true
[ , H, e, l, l, o, , W, o, r, l, d, ,]
Hello World,
HELLO WORLD,
Hello Java,
Hello
World,
*/
可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
- StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。
可变字符串能够动态的分配字符串的空间。所以可以增加、插入等。
package string;
public class addText {
public static void main(String[] args) {
StringBuffer str = new StringBuffer("Hello");
System.out.println(str);
str.append("world");//追加
System.out.println(str);
str.insert(5, ",");//插入
System.out.println(str);
str.replace(5,6," ");//替换,区间左开右闭
System.out.println(str);
str.delete(5,7);//删除
System.out.println(str);
}
}
/*
Hello
Helloworld
Hello,world
Hello world
Hello world
*/
和String区别:(1)效率比String高;(2)比String节省内存。
package string;
public class timeText {
public static void main(String[] args) {
long sTime = System.currentTimeMillis();
String s1 = new String(" ");
for (int i = 0; i < 1000; i++) {
s1 += i;
}
long eTime = System.currentTimeMillis()-sTime;
System.out.println("String类运行时间:"+eTime);
long sTime2 = System.currentTimeMillis();
StringBuffer s2 = new StringBuffer(" ");
for (int i = 0; i < 1000; i++) {
s2.append(i);
}
long eTime2 = System.currentTimeMillis()-sTime2;
System.out.println("StringBuffer类运行时间:"+eTime2);
}
}
/*
String类运行时间:6
StringBuffer类运行时间:1
*/