String字符串的存储原理
- 关于Java JDK中内置的一个类:java.lang.String
- String表示字符串类型,属于引用数据类型。
- 在java中随便使用双引号括起来的都是String对象。例如:“abc”,“def“,“hello world!“。
- java中规定,双引号括起来的字符串,是不可变的,也就是说”abc“自始至终不可变,不能变成”abcd”。
why 不可变?(重点知识)
源代码中,String类中有一个byte[]数组,这个byte[]数组采用了final修饰,因为数组一旦创建长度不可变。并且被final修饰的引用一旦指向某个对象之后,不可再指向其它对象,所以string是不可变的!
“abc”无法变成“abcd"
- 在JDK当中双引号括起来的字符串,例如:”abc”“def”都是直接存储在“方法区"的“字符串常量池”当中的。
why 放在字符常量池中?(重点知识)
字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。
String s1 = "abcdef";
String s2 ="abcdef" + "xy";
String s3 = new String("xy");

String类常见的方法
- String s=new String(“”);
- String s=“";最常用
String s = new String("helloworld!");
System.out.println(s);
--------------------------------------------------------------
String s = "hello";
System.out.println(s);
String类的byte数组方法
- String s=new String(byte数组);
- String s= new String(byte数组,起始下标,长度)
byte[] bytes ={97,98,99};
String s2 = new String(bytes);
System.out.println(s2.toString());
System.out.println(s2);
-------------------------------------------------------------
String s3 = new String(bytes, offset: 1, length: 2);
System.out.println(s3);
String类的char数组方法
- String s=new String(char数组);
- String s=new String(char数组,起始下标,长度);
char[] chars={'我','是','中','国','人'};
String s4 = new String(chars);
System.out.println(s4);
-------------------------------------------------------------
String s5 = new String(chars, offset: 2, count: 3);
System.out.println(s5);
String类的charAt(int index)方法
char c = "123".charAt(2);
System.out.println(c);
String类的compareTo(String anotherString)方法
- 字符串之间比较大小不能直接使用 > <,需要使用compareTo方法
int result = "abc".compareTo("abc");
System.out.println(result);
int result2 = "abcd".compareTo("abce");
System.out.println(result2);
int result3 = "abce".compareTo("abcd");
System.out.println(result3);
System.out.println("xyz".compareTo("yxz"));
String类的contains(CharSequence s)方法
System.out.println("Hellolorld.java".contains(".java"));
System.out.println("http://www.baidu.com".contains("https://"));
String类的endswith(String suffix)方法
System.out.println("test.txt".endsWith(".java"));
System.out.println("test.txt".endsWith(".txt"));
System.out.println("fdsajklfhdkjlsahfjkdsahjklfdss".endswith("ss"));
String类的equals(Object anObject)方法
- 比较两个字符串必须使用equals方法,不能使用“=”
注意:调用equals方法时,若出现:a.equals("123");
需将上面的代码改成以下格式,以防空指针异常:"123".equals(a);
System.out.println("abc".equals("abc"));
String类的equalsIgnareCase(String anotherString)方法
System.out.println("ABc".equalsIgnoreCase("abc"));
String类的getBytes()方法
byte[] bytes ="abcdef".getBytes();
for(int i = 0; i < bytes.length;i++)(
System.out.println(bytes[i]);
}
String类的indexOf(String str)方法
- 判断某个子字符串在当前字符串中第一次出现处的索引(下标)
System.out.println("oraclejavac++.netc#javaoraclec++".indexOf("java"));
String类的isEmpty()方法
String s ="";
System.out.println(s.isEmpty());
String s = "a";
System.out.println(s.isEmpty());
String类的Length()方法
- 判断数组长度是Length属性,判断字符串长度是length()方法
System.out.println("abc".length());
System.out.println("".length());
String类的LastIndexof(String str)方法
- 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
System.out.println("oraclejavac++javac#phpjavapython".lastIndexOf(str."java"));
String类的replace()方法
String newString = "http://www.baidu.com".replace( target: "http://", replacement: "https://");
System.out.println(newString);
String newString2 = "name=zhangsan&password=123&age=20".replace(target: "=", replacement: ":");
System.out.println(newString2);
String类的split(String regex)方法
String[] ymd = "1980-10-11".split(regex:"-");
for(int i =0;i < ymd.length;i++){
System.out.println(ymd[i]);
}
String param = "name=zhangsan&password=123&age=20";
String[] params = param.split( regex: "&");
for(int i = 0; i <params.length; i++){
System.out.println(params[i]);
}
String类的startsWith(String prefix)方法 (掌握)
System.out.println("http://www.baidu.com".startsWith("http"));
System.out.println("http://www.baidu.com".startsWith("https"));
String类的substring(int beginIndex)方法
System.out.println("http://www.baidu.com".substring(7));
System.out.println("http://www.baidu.com".substring(7, 10));
String类的toCharArray()方法
char[]chars ="我是中国人".toCharArray();
for(int i = 0;i < chars.length;i++)
System.out.println(chars[i]);
}
String类的toLowerCase()方法 (掌握)
System.out.println("ABCDefKXyz".toLowerCase());
String类的toUpper()方法 (掌握)
System.out.println("ABCDefKXyz".toUpperCase());
String类的trim()方法
System.out.println(" hello world ".trim());
String类的valueOf()方法
String s1 = String.valueOf(true);
String s1 = String.valueOf(180);
String s1 = String.valueOf(3.14);
String s1 = String.valueOf(new Customer());
System.out.println(s1);
Object obj = new Object();
System.out.println(obj);
class Customer{
public String toString(){
return "我是一个VIP客户!!!"
}
}