String
java.lang.String 字符串类 该类加final修饰
* 底层是char数组
* 所以字符串很多特性就是数组的特性
*
* 1字符串一旦创建不能更改
*
* 2查询更改快 添加删除慢 为了提升字符串的访问效率,Java中提出了字符串常量池,相当于一个缓存区
*
*
*
* 引用类型对象应该保存在堆内存 但是字符串不同,保存在静态区的字符串常量池中
* 3在程序的执行过程中,如果程序要用到某个字符串"abc"虚拟机
* 如果已经有了,就直接指向该字符串即可,如果没有就新建一个对象,并指向
public class _01_String {
public static void main(String[] args) {
String s1 = "abc";
//不会去指向堆内存, 会指向字符串常量池s
String s2 = "abc";
//true 比较的是内存地址
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
//这里并没有改变字符串abc的值而是新建了一个字符串k 并让s1z指向k
s1 = "k";
String s3 = "abc";
String s4 ="abc";
String s5 = "Abc";
//上面只创建了两个对象 abc 和Abc
System.out.println(s3 == s4);
//true
System.out.println(s3.equals(s4));
System.out.println("---------");
//第三部分
//创建三个对象 (堆内存两个 常量池一个) 五块空间栈内存两个 堆内存两个 常量池一个
String s6 = new String("123");
String s7 = new String("123");
System.out.println(s6 == s7);
System.out.println(s6.equals(s7));
}
String常用方法
public class _04_String {
public static void main(String[] args) {
// 返回字符串长度 int length()
String s1 = "qwertss%";
System.out.println(s1.length());// 8
// 获取字符串某个位置上的字符
//从0开始
char c1 = s1.charAt(2);
System.out.println(c1);
//判断字符串是否以指定字符结尾的 判断是否以指定字符开始
System.out.println("HelloWord.java".endsWith("java"));
System.out.println("HelloWord.java".endsWith("java "));//false
//不区分大小写
System.out.println("abc".equals("ABc"));
//true
System.out.println("abc".equalsIgnoreCase("ABc"));
byte [] byteArr = "abc".getBytes();
for (byte b : byteArr) {
System.out.println(b);
}
System.out.println("---");
// int indexOf(String str) : 获取指定字符串的起始索引值,找不到返回-1,如果有多个 ,找到第一个就不找了
System.out.println("abcdce".indexOf("cd"));
// int indexOf(String str,int fromIndex) : 从指定位置开始找(包含),找不到返回-1
System.out.println("abcdeabc".indexOf("a",1));
// int lastIndexOf(String str) : 获取最后一次出现的位置,找不到返回-1(倒着遍历,第一次出现,就是最后一次)
// int lastIndexOf(String str,int fromIndex) : 获取最后一次出现的位置,找不到返回-1,从指定位置反向搜索,第一次出现的位置
System.out.println("abcdeabc".lastIndexOf("a"));
// String replaceAll(String regex, String replacement) : 把一个字符串替换为指定字符串
// 一个类似的 replace : 这两个功能是一样的,只不过 replace 不支持正则表达式
System.out.println("123321".replaceAll("1", "a")); // a2332a
System.out.println("1.2.3".replaceAll(".", "-")); // ----- , 因为 会把 . 解析为正则表达式,而 . 代表 任何字符
// 1-2-3 , 正则表达式中 可以通过 \ 把 . 转义为无意义字符,但是在java中 \ 是转移符,所以 要写 \\ 对\进行转义才可以
System.out.println("1.2.3".replaceAll("\\.", "-"));
System.out.println("1.2.3".replace(".", "-")); // 1-2-3 , 因为不支持正则表达式,所以 . 就是 .
// String[] split(String regex) : 分割字符串,通过指定分隔符,来分割字符串,返回分割后的新字符串数组,支持正则表达式
String myTime = "2021-1-20";
String[] myTimes = myTime.split("-");
for (String string : myTimes) {
System.out.println(string);
}
System.out.println("==========");
// String substring(int begin) : 获取该字符从某个下标开始到结尾的子字符串(包含)
System.out.println("abcde".substring(3));
// String substring(int beginIndex,int endIndex) : 获取该字符从某个下标开始(包含) 到某个下标结束的子字符串(不包含)
System.out.println("qwerttyuyikjn".substring(3, 6));
char[] c2 = "abc".toCharArray();
for (char c : c2) {
System.out.println(c);
}
//14转大写转小写 string toUpperCase();
System.out.println("abcvaDASDASDAasdasd".toUpperCase());
System.out.println("aggaDASDASDAasdasd".toLowerCase());
//15String trim 删除字符串两边的空格
System.out.println(" ab ce ".trim());
//17 static String valueOf(Object obj)调用指定对象的toString方法
System.out.println(new Object());
String ss =null;
System.out.println(ss);
}
1StringBuffer 和StringBuilder是什么?
*
* 是一个可变的字符串缓冲区
*
*
* 2原理
*
*
* 预先在内存中申请一块空间,可以容纳字符序列 字符数组
*
*
* 如果 预留空间不够,会进行自动扩容
* 底层都是char[] 并且默认初始化容量是16个字符
*
* 3String, StringBuffer, StringBuilder最大区别
*
* 1string不可变字符序列,而StringBuider和StringBuffer是可变字符序列
* 2StringBuffer是线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
* 3StringBuilder是非线程安全,在多线程环境下可能出现问题效率高,一般用于方法中
* 4 如何选择StringBuilder和StringBuffer
* 多线程环境下,是否有可能出现多个线程同时操作同一个数据的可能(增删改)
类型转换
public class _04_Integer {
public static void main(String[] args) {
//int --> Integer
Integer i1 = new Integer(222);
Integer i2 = Integer.valueOf(222);
//2 Integer --> int
int i3 = i2.intValue();
//3 String ---> Integer
Integer i4 = Integer.valueOf("123");
Integer i5 = new Integer("222");
//4 Integer -->String
String s1 = i5.toString();
//5String -->int
int i6 = Integer.parseInt("12312");
//6int --String
String s2 =333 +"1";
System.out.println(s2);
}