1。包:
2.string
package com.lzk.test;
public class StringDemo {
public static void main(String[] args) {
//本来应该打印出来str1的地址,但是由于内部操作,打印出来的直接是内容。
String str1 = "Hello World";
System.out.println(str1);
char[] chars = {'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'};
String str2 = new String(chars);
System.out.println(str2);
//72是H的ASCII码,101是e的ASCII码,依次类推
byte[] bytes = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
String str3 = new String(bytes);
System.out.println(str3);
}
}
//输出字符串的长度
System.out.println(str1.length());
//输出字符串的第0个字符
char c = str1.charAt(0);
System.out.println(c);
//输出字符串的字符数组
char[] chars1 = str1.toCharArray();
System.out.println(chars1);
//比较两个字符串是否相等
String str4 = "Hello";
String str5 = "World";
System.out.println(str4 == str5);//false,相同字符串的地址是一样的,所以是false
System.out.println(str4.equals(str5)); //true
//忽略大小写比较两个字符串是否相等
String str6 = "HELLO";
String str7 = "Hello";
System.out.println(str6.equalsIgnoreCase(str7)); //true
//截取字符串内容,包前不包后
String str8 = "HelloWorld";
String str9 = str8.substring(6,8); //从第6个字符开始截取
System.out.println(str9);
//从某个位置截取字符串内容
String str10 = "HelloWorld";
String str11 = str10.substring(6); //从第6个字符开始截取
System.out.println(str11);
//替换字符串中的指定内容
String str12 = "你在玩nm呢!!!!";
String str13 = str12.replace("nm", "**");
System.out.println(str13);
//判断字符串是否包含指定内容
String str14 = "Hello World";
boolean flag = str14.contains("World");
System.out.println(flag);
//判断字符串是否以指定内容开头
String str15 = "Hello World";
boolean flag1 = str15.startsWith("Hello");
System.out.println(flag1);
//把字符串按指定内容ferred分割成数组
String str16 = "Hello World";
String[] strArr = str16.split(" ");
for (String str : strArr) {//增强型for循环
System.out.println(str);
}
注意事项:1.String 的对象是不可变的,如果你为这个对象增加了新的内容,改变的是新开辟的堆内存的内容,原始String的地址内容没有改变。
2.只要是双引号所写出的字符串变量,会存储到字符串常量池,且相同内容的字符串只存储一份。但是通过new方法创建的字符串对象,每new一次都会产生一个新的对象放在堆内存。
String s2 = new String("abc");
这行代码生成了两个对象,一个在堆内存的字符串常量池,一个直接在堆内存。