str:引用类型的变量
“sdf”:对象
String类型对象声明时将new省略掉了。
直接打印strSystem.out.println(str); 不会出现对象地址,是因为String类重写了toString方法。
引用变量str指向的内存地址改变,“abc”这个对象还在那里。
① new方式(每次都会在heap上创建一个新的实例)
Stringstr1 = new String(“abc”);
② 字面量形式(不需要创建新实例,先去字符串常量池找)
String str2 = “abc”;
System.out.println(“str1 == str2”);//false
System.out.println(“str1.equals(str2)”);//true,equals()方法被重写了,比较字符串中的每个字符是否相同。
③ 字面量+字面量(先去常量池找)
Stringstr3 = “abc”+ “def”;
④ 字面量+变量(先去常量池找,如果有调用StringBuild连接)
Stringstr4 = “abc” String str5 = str4 +“def”;
》String(byte[] bytes) 将字节数组转化为字符串(查询编码表)
正数查询ASCII码表
负数查询平台自带码表
结果:
》 String(byte[] bytes, int offset,int length)
offset:数组的起始索引
length:要截几个
》 String(char[] value)将字符数组转化为字符串(不查询码表)
》String(char[] value, int offset,int count)起始索引,个数
》 int length():返回字符串的长度
》 String substring(int beginIndex, int endIndex):截取字符串
结果:
也就是说:含头不含尾。
》 Stringsubstring(int beginIndex):后面全要
》 booleanstartsWith(String prefix):判断一个字符串是不是另一个字符串的前缀
》 booleanendsWith(String prefix)
结果:
》 boolean contains(String s):判断一个字符串中是否包含另一个字符串
》 intindexOf(char ch):查找一个字符,在字符串中第一次出现的索引
》 byte[]getBytes():将字符串转成字节数组(查询编码表)
结果:
如果字符串为汉字,则会查询平台编码
结果:我的平台编码为UTF-8,使用三个字节表示一个汉字
如果将平台编码改为GBK,则为
因为GBK,用两个字节来表示一个汉字。
》 char[]toCharArray() 将字符串转成字符数组(与构造器相反)
》 booleanequals(Object) 判断字符串中的字符是否完全相同,如果完全相同则返回true。
》 booleanequalsIgnoreCase(String s)忽略大小写,判断字符串中的字符是否相同
结果是:
》 StringtoUpperCase() 将字符串全改为大写
》 StringtoLowerCase() 将字符串全改为小写
》 charcharAt(int index) 返回指定索引处的char值