面向对象 - String类和常量池
String类
-
- String类基础:String类又被称作不可变字符序列,Java字符串就是Unicode字符序列;Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例;String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
package me.hzyis.test; public class Test { public static void main(String[] args) { String a = "测试"; //定义字符变量 String b = new String("测试2"); //创建String类对象 String c = "测试"+"3"; //字符串拼接 String d = "测试"+4; //有一个字符串,+号则变为字符串连接符 System.out.println(a+"\r\n"+b+"\r\n"+c+"\r\n"+d); } }
package me.hzyis.test; public class Test { public static void main(String[] args) { String s1 = "core Java"; String s2 = "Core Java"; System.out.println(s1.charAt(3)); //提取下标为3的字符,从0开始索引,所以第三个值为"e",不可为负数 System.out.println(s2.length()); //字符串的长度,算上空格共10个字符 System.out.println(s1.equals(s2)); //比较两个字符串是否相等 System.out.println(s1.equalsIgnoreCase(s2)); //比较两个字符串是否相等(忽略大小写) System.out.println(s1.indexOf("Java")); //字符串s1中是否包含"Java"字符,如果存在返回指定字符在序列的位置 System.out.println(s1.indexOf("java")); //字符串s1中是否包含"java"字符,如果没有返回-1 String s = s1.replace(' ','&'); //将s1中的空格替换为&符号,替换后赋值给s,s1不会有任何变化 System.out.println("result is:" + s); System.out.println("\r\n****************************\r\n"); String st = ""; String st1 = "How are you?"; System.out.println(st1.startsWith("How")); //是否以How开头 System.out.println(st1.endsWith("you")); //是否以You结尾 st = st1.substring(4); //从下标为4的字符开始 到 字符串结尾为止,提取子字符串 System.out.println(st); st = st1.substring(4,7); //提取下标是4到7,包括4不包括7的字符串 System.out.println(st); st = st1.toLowerCase(); //全部转小写 System.out.println(st); st = st.toUpperCase(); //全部转大写 System.out.println(st); String st2 = " How old are you!! "; st = st2.trim(); //去除首尾空格,无法去除中间的空格 System.out.println(st); //st2不变,生成新的st字符串输出 System.out.println(st2); //因为String是不可变字符序列,所以st2不变 } }
- String类基础:String类又被称作不可变字符序列,Java字符串就是Unicode字符序列;Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例;String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
常量池
-
- 全局字符串常量池(String pool):全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
- class文件常量池(Class Constant Pool):class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
- 运行时常量池(Runtime Constant Pool):运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
package me.hzyis.test; public class Test { public static void main(String[] args) { String test1 = "abc"; String test2 = "abc"; String test3 = new String("abc"); System.out.println("是否相同:" + (test1==test2)); //test1和test2处在相同对象中,所有为true System.out.println("是否相同:" + (test3==test2)); //test3是不同对象,所以为false } }