/* java.lang.String 是字符串类型 注意:只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里, 如果是运行时对字符串.加或相减会放到堆中(放之前会先验证方法区中是否含有 相同的字符串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然 后再返回该对象的地址 */ public class StringTest01{ // java的入口 public static void main(String[] args){ // 创建一个“abc”字符串对象,该对象的内存地址,让a1变量来保存 // a1 是一个引用,a指向“abc”对象 String a1 = "abc"; // a1是一个局部变量,a1前边没有final,所以a1可以重新指向 // 但是 "abcd" 字符串本身是不可变 a1 = "abcd"; System.out.println("字符串为:"+a1); String a2 = "Ming"; // 在字符串常量池中新建一个“Arry”字符串对象,该对象是不可变的 String a3 = "Ming"; // 从字符串常量池中直接拿来用 System.out.println(a2 == a3); // true // 比较两个字符串是否相等,不能用“==”, String a4 = new String("ming"); String a5 = new String("ming"); System.out.println(a4 == a5); // // 比较两个字符串是否一致,必须使用String类型提供的equals方法 System.out.println(a4.equals(a5)); // true String s1 = "a"; String s2 = "b"; s1 = s1 + s2 } }
/* 普通字符串的声明和创建字符串对象的区别 1. String a1 = "arry"; 只会在字符串常量池中创建一个“arry”字符串对象 2. String a2 = new String("arry"); 会在字符串的常量池中创建一个“arry”字符串对象 并且会在堆中再创建一个字符串对象 第二种 方式比较浪费内存,常用第一种方式 */ public class StringTest02{ public static void main(String[] args){ String a1 = "ming"; String a2 = new String("ming"); } }
/* 面试题: String a1 = new String("ming"); String a2 = new String("ming"); 以上代码 创建了几个对象? */ public class StringTest03{ public static void main(String[] args){ String a1 = new String("ming"); String a2 = new String("ming"); /* 通过图形分析: 1、 创建了3个对象,堆区中2个对象,常量池中1个 建议:使用String的时候不建议使用new关键字,因为它会创建两个对象 总结: 堆区中 试运行期分配的,常量池中是编译期分配的 */ } }
/* 使用String的时候注意的问题: 尽量不要频繁的拼接操作,因为字符串一旦创建不可改变,只要频繁拼接, 就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题 */ public class StringTest04{ public static void main(String[] args){ String[] s = {"sport","music","food","sleep"}; // 需求: 将所有的兴趣爱好拼接成字符串“sport,music,food,sleep”; String temp = ""; for(int i = 0; i < s.length; i++){ if(i == s.length-1){ temp += s[i]; } else { temp += s[i]+","; } } System.out.println("拼接好的字符串:"+temp); } }
/* 字符串常用的构造方法 */ public class StringTest05{ public static void main(String[] args){ String a1 = "ming"; String a2 = new String("ming"); byte[] bytes = {1,2,3,4}; String a3 = new String(bytes); System.out.println(a3); String a4 = new String(bytes,1,2); System.out.println(a4); char[] a5 = {‘我‘,‘是‘,‘A‘}; String s = new String(a5); System.out.println(s); // 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。 String a6 = new String(a5,2,1); System.out.println(a6); } }
时间: 2024-10-26 16:55:36