目录
本节我们来学习Java中的字符串
需要掌握:
主要要求掌握以下几点
1,String的一些常见方法(重点):
要求是:熟悉String对象具备哪些方法(能力)
可在没有开发工具(如idea)的提示下可以熟练地使用这些方法
2,掌握String类本身的特性(面试中易出现)
3,String类本身的一些优化(可能出现在面试中,初学者需做到基本了解)
4,String类的周边类StringBuilder
什么是String
String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承。
String首先是一个Java中的普通类,可以理解为是用来描述字符串的类,所以Java中对象具备的特性,String对象同样具备
String s1 = "Hello"; String s2 = "hello";
比较s1和s2是否相等
s1 == s2;
这不是正确的用法,但是并不意味着一定得不到正确的结果
正确的用法是s1.equals(s2);
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1.equals(s2));//正确的用法
System.out.println(s1 == s2); //错误的用法,得到错误的结果和正确的结果都是有可能的
// JVM利用这种模糊性,为String做了很多优化
优化后的s1和s2指向同一个对象
}
程序执行的结果是两种用法都得到了正确的结果:
理解一下:
如果你使用正确的写法,一定可以得到正确的结果;
如果你写的正确,结果错误,那是jvm出bug了;
如果你写的错误,结果可能是正确的,也可能是错误的。
初学者把精力放在学习正确的方法上,我们只要保证自己会使用正确的写法即可,可不过分深究为何某时错误解法会得出正确的答案。
如果你使用了错误的写法,结果叫做“行为未定义”。(undefined behavior,即标准中未作规定的行为)
String类的特殊性
String类的对象具有普通对象的特性,除此之外,由于String类对象是使用最频繁的一种对象,可以说有50%左右的对象都是String类的对象,所以String类对象有其特殊性:
1,Java中的String类对象,从语法上赋予了特权,就是双引号的使用"..."
例如:String s ="Hello" 不考虑优化的情况下,认为就是 String s = new String("Hello");
实际上其背后蕴含着 new对象 + 指向初始化的过程,因为使用的多赋予特权做了简化
2, Java在设计的时候,让String类对象是一种不可变(immutable)的对象
String s = "Hello"; //这里是一个对象是“Hello”
s = s + " World"; //得到了一个新对象"Hello World",让s指向了这个对象,并不会改变旧的对象
了解了以上这两条特性,我们就可以去认识String的常见方法了
字符串String的构造
1,String s = "Hello";(99%是这种用法)
String s = new String("Hello");
2,把二进制数据(没有经过字符集解码的数据,解码成String) 1%
二进制数据的表示形式:byte[] bytes ={ 121,131,151}
经过字符集解码
格式:String s = new String(bytes,0,byte.length,"unicode"); 或者其他字符集
示例:
public class Demo2 {
public static void main(String[] args) throws Exception {
//水 unicode:6c34
//浒 unicode:6d52
//传 unicode:4f20
byte[] bytes={0x6c,0x34,0x6d,0x52,0x4f,0x20};
//这里是unicode编码
String s = new String(bytes,0,bytes.length,"unicode");//解码
System.out.println(s);//输出
}
}
常用方法
字串符的比较
equals(..) 相等性
equalsIgnoreCase(..) 忽略大小写的相等性比较
Ignore:忽略
Case:可以视为大小写
Case sensitive 大小写敏感
compareTo(...) 大小比较
compareToIgnoreCase(....)忽略了大小写的比较
其他方法
1,理解字符串 字符组成的 串 String 即一系列的字符
"Hello" 逻辑上即:'H' 'e' 'l' 'l' 'o'
2,字符串有长度
s.length() //与数组不同,数组的length是属性,不加(),而s这里是方法,需要加()去调用
//粗略地认为是字符的个数,不是字节的长度
s.isEmpty => true/false
s.length() ==0 这两个式子等价
3,通过字符串转换字符串数组 => char[]
s.toCharArray();
4,取某个字符
s.charAt(index) 0<= index <s.length()
public class Demo3 {
public static void main(String[] args) {
String s = "hello";
System.out.println(s.length());
System.out.println(s.isEmpty());
System.out.println(s.charAt(4));
char[] ss= s.toCharArray();
}
}
输出结果:
5,查找
1)从前往后找indexOf(....) 从后往前找lastIndexOf(....)
2)传入字符串String or 字符char
3)给定from 和不给定from
indexOf(....),lastIndexOf(....)都可以传入字符或传入字符串或传入字符串和开始找的位置或传入字符和开始找的位置;故共有八种
4,数值类型,boolean类型 转字符串
String.valueOf((byte)1)
String.valueOf((short)1);
String.valueOf(1);
String.valueOf(1L);
1.0F,1.0,'c' ,true,false,null
5,大小写转换
字符串大小写转换
s = t.toUpperCase() 大写
s = t.toLowerCase() 小写
字符大小写转换
Character.toUpperCase();//转大写
Character.toLowerCase();//转小写
Character.isUpperCase();//判断是不是大写
Character.isLowerCase();//判断是不是小写
这些知识可以帮助学编程的你了解String类及其方法嘛?若您发现有错误请各位尽情批评指正!!
如果对你有帮助,可以的话请三连支持,谢谢!!