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); } }