==符号的使用
String t1 = "qwertyui";
String t2 = new String("zxcvbn");
String t3 = new String("zxcvbn");
System.out.println(t1);
System.out.println(t2);
System.out.println(t3);
if (t2 == t3) {
// 引用类型 == 比较的是保存的地址
// 基本类型 == 比较的是值
// 都是比较栈上保存的内容
System.out.println("t2相等t3");
}
String对象的内存分配
public static void main(String[] args) {
String t1 = "ABCDEFG";
// 字符串是一种特殊的数据类型,它的值不在栈和堆上
// 存储在方法区的字符串常量池里
// 1.去字符串常量池中查找是否有常量ABCDEFG
// 如果有,直接把地址赋值给变量保存
// 如果没有,先创建常量,再赋值给变量保存
String t4 = "ABCDEFG";
if (t1 == t4) {
System.out.println(t1 == t4);
}
String t2 = new String("ABCDEFG");
// 1.堆上开辟内存 0x001
// 2.0x001中分配出一块区域保存0x003
//
String t3 = new String("ABCDEFG");
// 1.堆上开辟内存 0x002
// 2.0x002中分配出一块区域保存0x003
// 字符串比较禁止使用 == 必须使用equals方法\
// == 比较的是地址 equals比较的是值
// 字符串一般是比较内容 所以用equals
if (t2 != t3) {
System.out.println("t2 和t3的地址不相等");
}
if (t2.equals(t3)) {
System.out.println("t2和t3的值相等");
}
// 会创建几个对象?2个
// 1.常量池开辟空间保存123456
// 2.堆上开辟空间指向常量池中的123456
String text = new String("123456");
}
String对象的连接
String t1 = "123456";
// 使用引用类型 变量 用的是保存的地址 找到数据
String t2 = new String(t1);// new String("123456");
System.out.println(t2);
System.out.println(t1==t2);
public static void main(String[] args) {
String t1 = "ab";
String t2 = "cd";
String t3 = "abcd";
String t4 = "ab" + "cd"; // 编译时会优化成为abcd
// 每次使用+号连接字符串时都创建了一个新的对象
String t5 = t1 + t2;// = new string("abcd"); 分配到堆上
System.out.println("t3 == t4:" + (t3 == t4));
System.out.println("t3 == t5:" + (t3 == t5));
String t6 = t1 + t2 + t3 + t4;// 会产生3个对象
// StringBuffer
// StringBuilder
StringBuilder s1 = new StringBuilder();
// 追加一个字符串
s1.append(t1);
s1.append(t2);
s1.append(t3);
s1.append(t4); // 追加新内容
String s7 = s1.toString(); // 把StringBuilder 转换为String
StringBuffer s2 = new StringBuffer();
// 追加一个字符串
s2.append(t1); // 追加新内容
s2.append(t2);
s2.append(t3);
s2.append(t4);
String t8 = s2.toString(); // 把StringBuffer 转换为String
System.out.println(s7 + t8);
}
String相关方法的使用
import java.util.Arrays;
public class StringTest4 {
public static void main(String[] args) {
String t1 = "abcd你好";
// 长度 = 字符个数
System.out.println("获取字符串的长度:" + t1.length());
// 大小写不一致也是不同的
System.out.println("比较两个字符串是否相同:" + t1.equals("abcd"));
// 忽略大小写
System.out.println("比较两个字符串是否相同(忽略大小写):" + t1.equalsIgnoreCase("abcd你好"));
// 如果是拿字符串和对象比较,通常会使用字符串去掉用equals方法
String password = "123456";
// 推荐字符串在前,对象在后 防止出现password = null 的情况 导致程序崩溃
boolean f1 = "123456".equals(password);
// null对象调用任何属性和方法都会产生NullPointerException
// password = null
// boolean f2 = password.equals("123456"); // 程序崩溃
System.out.println("是否以XXX开始:" + t1.startsWith("abcd"));
System.out.println("是否以XXX结束:" + t1.endsWith("你好"));
System.out.println("是否包含字符串abc:" + t1.contains("abc"));
String t2 = t1.concat("1234"); // + 123
System.out.println(t2);
// 从第几个字符串开始剪切 下标从0开始
String t3 = t1.substring(2);
System.out.println(t3);
// 包含起点 不包含终点
String t4 = t1.substring(1, 3);
System.out.println(t4);
// 替换指定的字符
String t5 = t1.replace('a', 'F');
System.out.println(t5);
// 去掉前后的 不去掉中间的
String t6 = " 杀死对方 sadf sdfasd发第三方 ".trim();
System.out.println(t6);
// 去除全部的空格
String t7 = " asdf的 刚发的 入骨髓的 ".replaceAll(" ", "");
System.out.println(t7);
// 获取指定位置的字符
char c = t1.charAt(2);
System.out.println(c);
// 获得字符串的char数组
char[] cs = t1.toCharArray();
System.out.println(Arrays.toString(cs));
// 某个字符串的索引 ---- 第一个字符在元字符串的索引(如果包含)
// 包含多个 返回第一次出现的第一个字符的索引
int i = t1.indexOf("bc");
// 不包含返回-1
int j = t1.indexOf("000");
// 最后一次出现该字符串的首字符的索引
// 不包含返回-1
t1.lastIndexOf("nm");
// 切换大写
String t8 = t1.toUpperCase();
// 切换小写
String t9 = t8.toLowerCase();
System.out.println(t8);
System.out.println(t9);
// 将char[] 转换为字符串
char[] cs2 = {'c','f','r','g','1','2','6'};
String t10 = new String(cs2);
System.out.println(t10);
// 从索引为2开始连着的3个字符拼接为字符串
String t11 = new String(cs2, 2, 3);
System.out.println(t11);
// 按照特殊标记分割字符 得到字符串数组
String t12 = "1,2,3,4,5,6";
String[] s3 = t12.split(",");
System.out.println(Arrays.toString(s3));
}
}