关于String类(学习笔记)
简介:
- String表示字符串类型,属于引用数据类型,不属于基本数据类型。
- 在java中随便使用双引号括起来的都是String对象。例如"abc" , “def” , “xyz” 这是三个String对象
- java中规定,双引号括起来的字符串是不可变的,一代创建,终身不可变化。
- 在JDK当中双引号括起来的字符串,例如"abc" , “def” 等 都是直接存储在“方法区” 中的 “字符串常量池” 当中的。
为什么SUN公司要把字符串存储在一个“字符串常量池”当中呢?因为字符串在实际开发当中使用太频繁,为了执行效率,所以把字符串放在了字符串常量池中。
以下借用视频中的内存图解释字符串常量池
- 内存图1
String s1 = "abcdef";
String s2 = "abcdef" + "xy" ;
String s3 = new String("xy");
//以上代码的内存图如下:
- 内存图2
以上代码的内存图如下图所示:
- 内存图3
以上代码的内存图如下图所示:
所以上图中s1 == s2 返回值是true ,因为内存地址相同。
而x == y 的返回值是false 因为内存地址不同。
String类的常用方法展示:
-
返回值:char charAt(int index)
返回 char指定索引处的值。
-
int compareTo(String anotherString)
按字典顺序比较两个字符串。
-
boolean contains(CharSequence s)
当且仅当此字符串包含指定的char值序列时才返回true。
其实就是判断字符串中是否包含你输入的字符串片段。
CharSequence 是String类实现的一个接口,所以也可以传入String类参数。
-
boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结尾。
boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开头。
-
boolean equals(Object anObject)
将此字符串与指定对象进行比较。
-
boolean equalsIgnoreCase(String anotherString)
将此 String与其他 String比较,忽略大小写。 -
byte[] getBytes()
使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
-
int indexOf(int ch)
返回指定字符第一次出现的字符串内的索引。
返回-1表示不存在。
扫描二维码关注公众号,回复: 10607974 查看本文章 -
int lastIndexOf(int ch)
返回指定字符的最后一次出现的字符串中的索引。
返回-1表示不存在。
-
boolean isEmpty()
判断字符串是否为空。
-
int length()
返回此字符串的长度。
-
String replace(CharSequence target, CharSequence replacement)
用第二个参数替换字符串中的所有第一个参数。
-
String[] split(String regex)
将此字符串分割为给定的 regular expression的匹配。
-
String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。
String substring(int beginIndex, int endIndex)
返回一个字符串,该字符串是此字符串的子字符串。
-
char[] toCharArray()
将此字符串转换为新的字符数组。
-
String toLowerCase()
全部转换成小写。
String toUpperCase()
全部转换成大写。
-
String trim()
返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
-
static String valueOf(所有类型的参数)
返回一个字符串。
可参考valueOf的源代码,valueOf()方法会调用toString()方法,返回一个响应的字符串。
println()方法其实会调用valueOf()方法,然后在调用toString方法,所以在控制台输出的其实都是字符串。可以参考源代码。