package cn.learn.basic;
/*
程序当中所有双引号字符串,都是String类的对象,就算没有new,仍然是
字符串特点:
1.字符串内容不可改变,且字符串可共享使用
2.底层原理是byte[]字节数组,字节是数据存储的最小单位
字符串常量池
1.在String创建的字符串,直接双引号生成的字符串存在字符串常量池(heap)中,此时若串比较即为true
2.在双引号生成字符串中,堆中开辟有一块字符串常量池,池中有字符串对象
其地址指向池外堆中的byte[]数组的首地址
栈中的对象则指向字符串常量池中的字符串对象地址
注意:
1.基本类型 == 是比较数值
2.引用类型 == 是比较地址
*/
public class StringApi {
public static void main(String[] args) {
//有参创建字符串
String str=new String("我是new出来的String");
System.out.println(str+"\n=====================");
//根据字符数组创建字符串
char[] str_c={'a','b','c'};
//new时在堆中创建字符串对象,将char[]数组转换为byte[]数组(ASCII码值),字符串对象再指向byte[]
String str_cs=new String(str_c);
System.out.println(str_cs+"\n=====================");
//根据字节数组创建字符串
byte[] str_b={97,98,99,100,102};
String str_bs=new String(str_b);
System.out.println(str_bs+"\n=====================");
//直接创建
String str2="abc";
System.out.println(str2+"\n=====================");
String str1="abc";
System.out.println(str1+"\n=====================");
System.out.println(str1==str2);
/*
字符串内容值比较
public boolean equals(Object obj) -只有参数是字符串并且内容相同才会给true
public boolean equalsIgnoreCase(String str) -忽略大小写进行比较
注意事项:
1.任何对象都能用Object接收
2.equals具有对称性,a.equals(b)与b.equals(a)效果一致
3.一般常量在前,变量在括号,避免空指针异常(str=null; str.equals("abc");Nullpointerexception)
*/
boolean isEquals=str1.equals(str_cs);
System.out.println(isEquals);
System.out.println(str1.equals("abc"));
System.out.println("abc".equals(str1)); //可见双引号字符串本身就是个对象
/*
String中的获取相关常用方法
public int length(); -获取字符串长度
public String concat(String str) -将源字符串末尾添加上str字符串,是生成的一个新的字符串,与+相似
public char charAt(int index) -得到索引值index里的单个字符
public int indexOf(String str) -查找串str中在主串中首次出现的索引位置,如查找失败返回-1
String中截取的相关常用方法
重载方法截取:
public String substring(int index) -截取从index到字符串末尾的字符串,生成新的字符串
public String substring(int begin,int end) -截取[begin,end)的字符串,不影响源字符串
String中分割的方法
public String[] split(String regex) -按照参数进行切割,regex参考标准
注:**split其实是一个正则表达式,如果按照英文点切分,必须写\\.
*/
String str3="nihhaoyayaya";
//获取索引位置
int index=str3.indexOf("ha");
System.out.println("ha在nihhaoyayaya中哪个索引位置开始匹配成功:"+index); //3
//截取
String sub_string=str3.substring(5,9);
System.out.println(sub_string); //oyay
//分割
String[] str3_split=str3.split("a");
System.out.println(str3_split[1]); //oy
/*
String中与转换相关的常用方法
public char[] toCharArray(); -将字符串转化为字符数组
public byte[] getByte(); -获得当前字符串底层的字节数组
public String replace(CharSequence oldString,charSequence newString);
-将老字符串替换为新的字符串并返回替换之后的结果字符串
*/
//转化成字符数组
char[] chars = "hello".toCharArray();
System.out.println(chars[2]);
//转化成字节数组
byte[] bytes = "aorld".getBytes();
System.out.println(bytes[0]);
//替换字符
String str3_replace=str3.replace("o","m");
System.out.println(str3);
System.out.println(str3_replace);
}
}