前言
String类可以说是Java基础中非常重要的一个知识点了,为避免以后百度,记录一下。
基本使用
1、把字符串封装成对象。
String a = new String("hello");
2、将字符数组封装成对象。
char[] chars = {'h','e','l','l','o'};
String chars_1 = new String(chars);
3、将字节数组中指定位置的值封装成对象。
char[] chars = {'h','e','l','l','o'};
String chars = new String(chars,1,3);
4、直接使用=号赋值,也是最为简单的一种。
String a = "hello";
常量池
因为String太过常用,JAVA类库的设计者在设计String类时做了个小小的变化,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一个共享池中,当第二次再次生成同样内容的字符串实例时,就共享此对象,而不是创建一个新对象,但是这样的做法仅仅适合于通过=符号进行的初始化。这个所谓的共享池指的就是JVM中方法区中的字符串常量池。
在Java程序启动时,JVM会读取磁盘中的Java源文件,将源文件中的内容读取到方法区的常量池中并创建class文件。String在创建对象时分为两种,使用new创建时是对象里存放的是堆内存中的地址,而地址指向常量池中的常量。使用=号创建时,对象里直接存放的是常量池中的字符串常量,所以s1s2是false,s2s3是true。
而s1.equals(s2)为true是为什么呢?大家都知道,所有的类都默认继承Object类,而Object类中的equals方法是比较内存地址,但是String类重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals©返回true的原因了。
Object类中的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
String类中的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
String的判断功能
public static void main(String[] args) throws Exception {
String a1 = "hello";
boolean startsWith = a1.startsWith("h"); //判断字符串是否以指定的方式开头
boolean endWith = a1.endsWith("l"); //判断字符串是否以指定的方式结尾
System.out.println(startsWith);
System.out.println(endWith);
}
String的获取功能
public static void main(String[] args) throws Exception {
String a = "hello";
//获取字符串长度
int length = a.length();
//获取指定位置的字符
char charAt = a.charAt(1);
//获取指定字符在字符串中第一次出现的位置
int indexOf = a.indexOf("l");
//从指定位置开始截取字符串
String substr = a.substring(2);
//从指定位置开始,到指定位置结束(包括开始位置,不包括结束位置。也就是说截取到结束位置的前一位)
String substr_end = a.substring(1,3);
String b = "hello-he-hel";
//根据指定字符拆分成数组
String[] substr_split = b.split("-");
for(String a1 : substr_split) {
System.out.println(a1);
}
}
String的转换功能
public static void main(String[] args) throws Exception {
String a = "HElLo";
//字符串转换为字符数组
char[] chars = a.toCharArray();
//转换为大写 (hello)
String a_Lower = a.toLowerCase();
//转换为小写 (HELLO)
String a_upper = a.toUpperCase();
}
文尾
文章均为学习阶段记录笔记,若有不妥请留言指正。谢谢!