Java常用类1
Java常用类1
字符串相关的类
String(代表字符串)
理解String的不可变性
-
String是一个final类,代表不可变的字符序列(不可变性)
-
字符串是常量,用“”引起来。在创建后不能更改(不可继承)
-
String对象的字符串内容是存储在一个字符数组value[]中的(final char[] valve)
-
String实现了Serializable接口:表示字符串是支持序列化的
实现了Comparable接口:表示String可以比大小-
-
通过字面量赋值(不同于new),此时的字符串值是在字符串常量池中(不会右有两个相同的常量)
public static void main(String[] args) {
String s1 = "abc";//字面量的定义方法
String s2 = "abc";
System.out.println(s1==s2);//比较s1和s2的地址是否相等
s1 = "hello";//当对字符串重新赋值时,要重写指定内存区赋值
System.out.println(s1);
System.out.println(s2);
System.out.println(s1==s2);
System.out.println("=====================================");
String s3 = "abc";
s3 += "def";//当对现有的字符串进行连接操作时,也要重写指定内存区赋值
System.out.println(s3);
System.out.println(s2);
System.out.println("=====================================");
String s4 ="abc";
String s5 = s4.replace("a","m");//当调用String的replace方法修改,也要重写指定内存区赋值
System.out.println(s4);
System.out.println(s5);
}
String对象的创建
String的实例化
- 字面量定义
- new+构造器
public static void text2(){
//通过字面定义:此时的S1,S2的数据JavaEE声明在方法区的字符串常量池中
String s1 = "javaEE";
String s2 = "javaEE";
//通过new:此时的s3,s4保存的地址值,是在堆空间中开辟空间以后对应的地址值
String s3 = new String("javaEE");
String s4 = new String("javaEE");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//flase
System.out.println(s1==s4);//flase
System.out.println(s3==s4);//flase
}
p1和p2的地址是一样的(”Tom“是字面量赋值)
注:String s = new String("abc")在内存中创建了2个对象
-
堆空间中new的
-
另一个char[]对应常量池中的"abc"
String的拼接
结论:
- 常量与常量的拼接结果在常量池
- 有变量参与,结果在堆中
- intern()方法,返回值在常量池中
public static void text3(){
String s1 = "javaEE";
String s2 = "hadoop";
String s3 = "javaEEhadoop";
String s4 = "javaEE"+"hadoop";
/*有变量参与在堆空间中(final修饰的话就是常量了)*/
String s5 = s1+"hadoop";
String s6 ="javaEE"+s2;
String s7 = s5.intern();
System.out.println(s3==s4);
System.out.println(s3==s5);
System.out.println(s3==s6);
System.out.println(s5==s6);
System.out.println(s7==s3);
}
Stringd的常用方法
String s1 = "HelloWorld";
System.out.println(s1.length());
System.out.println(s1.charAt(0));
System.out.println(s1.isEmpty());
System.out.println("=========================");
String s2 = s1.toLowerCase(Locale.ROOT);
System.out.println(s2);
System.out.println("=========================");
String s3 = " hello world ";
String s4 =s3.trim();//去向后空给
System.out.println("--"+s3+"--");
System.out.println("--"+s4+"--");
System.out.println("=========================");
System.out.println(s1.equalsIgnoreCase(s2));//是否相等(忽略大小写)
System.out.println("=========================");
System.out.println(s1.compareTo(s2));//比大小S1-s2(字符串排序)
System.out.println("=========================");
System.out.println(s1.substring(5));//去后面的子串
System.out.println(s1.substring(0,5));//左闭右开
System.out.println("=========================");
String s_1 ="helloworld";
boolean b_1 = s_1.endsWith("ld");//是否以指定字符结尾
System.out.println(b_1);
boolean b_2 = s_1.startsWith("ll",2);//是否以指定索引开始
System.out.println(b_2);
System.out.println("=========================");
String s_2 ="ll";
System.out.println(s_1.contains(s_2));//是否包含此字符串
System.out.println("=========================");
System.out.println(s_1.indexOf("lo"));//第一次出现的索引(存在情况)
System.out.println(s_1.indexOf("lo",5));//从5开始找
System.out.println(s_1.lastIndexOf("lo"));//从后往前找,从前往后排
System.out.println(s_1.lastIndexOf("lo",6));//在6之前从右向左找,从左往右排
//indexOf和lastIndexOf相同:1.只有一个 2.不存在(为负数)
System.out.println("=========================");
//替换
String s01 = "你好,wht";
String s02 = s01.replace("你好","再见");
System.out.println(s01);
System.out.println(s02);
String s03 = s01.replaceAll(",",";");//修改其中的字符
System.out.println(s03);
System.out.println("=========================");
//匹配
String s__1 = "12345";
boolean matches = s__1.matches("\\d+");//是否全是数字(+:多个)
System.out.println(matches);
String tel = "0351-1345678";
boolean result = tel.matches("0351-\\d{7,8}");
System.out.println(result);
System.out.println("=========================");
//切片
String s001 = "hello,wpod,java";
String[] s002 = s001.split("\\,");
for (int i = 0; i < s002.length; i++) {
System.out.println(s002[i]);
}
String和其他类型(结构)的转换
String与基本数据类型
-
String-->基本数据类型:调用包装类的方法:parseXxx(字符串)
-
基本数据类型-->String:调用valueOf(xxx) 或是连接符
String s1 = "123";
int s2 = Integer.parseInt(s1);
String s3 = String.valueOf(s2);//+""也可以
tring与char[]
-
String-->char[]:调用toCharArray()
-
char[]-->String:/调用String构造器
String s01 = "abc123";
char[] s02 =s01.toCharArray();
for (int i = 0; i < s02.length; i++) {
System.out.print(s02[i]);
}
System.out.println();
char[] s03 =new char[] {'h','e','l','l','o'};
String s04 = new String(s03);
System.out.println(s04);
* String与byte[](字节) (编码集和解码集必须一致)
-
String-->byte[](编码):调用getBytes()
-
char[]-->byte[](解码):调用String的构造器
String s_1 = "abc123你好";
byte[] s_2 = s_1.getBytes();
System.out.println(Arrays.toString(s_2));
String s_3 = new String(s_2);
System.out.println(s_3);