一:String 类对象的实例化
一般有以下两种方法,第一种,直接赋值,第二种则是通过new 一个对象,通过构造方法来实例化一个对象。
示例代码:
String str = "123456"; //对象实例化方式一:直接赋值
String str1 = new String("987654"); //对象实例化方式二:构造方法
这里需要注意的是,方法一所实例化的对象存储在方法区内,而方法二实例化的对象存储在堆中。示例图片如下:
二:String的比较(== 和 equals()方法)
通常的比较方式是通过“==”来进行比较,而这种比较形式在String类中则是相当于在比较目标的地址,而不是具体的判断其内容是否相等,在String中如果想要具体的比两个目标的具体内容,则是需要使用String.equals()方法,他的具体用法则是会在下面的示例代码中具体实现。
代码如下:
String str2 = new String("boy");
String str3 = new String("boy");
if(str2 == str3 ){
System.out.println("他们的地址相等");
}
if(str2 != str3){
System.out.println("他们的地址不相等");
}
if(str2.equals(str3)){
System.out.println("他们的值相等");
}
输出结果:
三:实例化的区别
一个新对象的创建,首先需要知道他的存储区间在哪里,如果创建2个相同内容的变量,就如第一节所讲的那样,有两种方式,他们的存储地点不同,直接赋值的存储地点为方法区,而通过构造方法创建的对象的存储地点为堆中,如果即将存储的新内容在方法区已经有相同的内容存在,那么新对象就会也指向已有的内容的地址,而如果堆上的相同内容通过手动入池将其放入方法区内时,同样的也不会再次创建对象,也是直接指向已有的内容,谨记这一点,在方法区不存在两个相同的内容。
代码示例:
String str = "123";
String str1 = "123";
String str2 = new String("123");
String str3 = new String("123").intern();
System.out.println(str == str1);
System.out.println(str == str2);
System.out.println(str1 == str3);
System.out.println("=================");
System.out.println(str.equals(str1));
System.out.println(str.equals(str2));
System.out.println(str.equals(str3));
运行结果:
通过这个例子再联系第二点所提到的比较方法,不难看出==所比较的是内存地址,而equals()方法则是比较的存储内容。
四:String类所包含的一些方法
public static void main(String[] args) {
//字符串比较字符串替换方法
String str = "abcd123";
String arr = "abcD123";
char[] str1 = str.toCharArray(); //将字符串转为字符数组
char[] str2 = {'z','a','c','s','f'};
String str3 = new String(str2); //将目标数组转为字符串
String str4 = new String(str2,1,4);
//将目标数组从下标1到4转为字符串
System.out.println(Arrays.toString(str1));
System.out.println(str3);
System.out.println(str4);
System.out.println(str.charAt(3)); //取得当前字符串下标的字符
System.out.println(str.equals(arr)); //有符号比较
System.out.println(str.equalsIgnoreCase(arr)); //无符号比较
System.out.println(str.compareTo(arr)); //比较两个字符串的大小关系
}
输出结果:
代码如下:
public static void main(String[] args) {
//字符串查找,字符串替换方法
String str = "abcdefgh";
System.out.println(str.contains("de")); //true
//判断一个字符串是否存在
System.out.println(str.indexOf("cd")); //2
//从开始位置查找字符串,如果存在则返回起始下标,不存在则返回-1
System.out.println(str.indexOf("ef",3)); //4
//从指定位置开始查找字符串位置
System.out.println(str.lastIndexOf("bc")); //1
//右后向前查找子字符串位置
System.out.println(str.lastIndexOf("ab",5)); //0
//从指定位置右后向前查找子字符串位置
System.out.println(str.startsWith("ab")); //true
//判断字符串是否以指定字符串开头
System.out.println(str.startsWith("de",4)); //false
//从指定位置开始判断字符串是否以指定字符串开头
System.out.println(str.endsWith("fgh")); //true
//判断字符串是否以指定字符串结尾
String pop = "hello lucky";
System.out.println(pop.replaceFirst("l","w"));
//替换首个指定内容 hewlo lucky
System.out.println(pop.replaceAll("l","w"));
//替换全部的指定内容 hewwo wucky
}
执行结果:
代码如下:
//字符串拆分方法
// 注意的是 * ^ : \ | . 这6个字符的实现必须使用\
// 而\的实现又需要\,所以一会为\\* 实现对*的分割
public static void main(String[] args) {
String str = "hello boy hello girl";
String str1 = "hello*boy*hello*girl";
String str2 = "hello^boy^hello^girl";
String[] pop = str.split(" ");
String[] pop2 = str1.split("\\*");
String[] pop3 = str2.split("\\^");
//以空格字符拆分字符串并存储在数组中
String[] pop1 = str.split(" ",3);
//以空格字符拆分字符串并存储在数组中,长度可设置
System.out.println(Arrays.toString(pop));
System.out.println(Arrays.toString(pop1));
System.out.println(Arrays.toString(pop2));
System.out.println(Arrays.toString(pop3));
}
执行结果:
代码如下:
public static void main(String[] args) {
//字符串截取方法
String str = "asdfghjk";
String str1 = " Light long Light sanye ";
System.out.println(str.substring(5));
//从指定位置开始截取直到结尾
System.out.println(str.substring(0,4));
//从指定区间截取内容,遵循左闭右开原则即[0,4)
System.out.println(str1.trim());
//去掉字符串的左右空格
System.out.println(str1.toUpperCase());
//字符串转为大写
System.out.println(str1.toLowerCase());
//字符串转为小写
System.out.println(str.concat(str1));
//字符串的连接,等于+的作用,不会放入池中
System.out.println(str.isEmpty());
//判断字符串是否为空
}
运行结果:
以上就是对String 类方法的一些总结,这只是众多方法中的一部分,更多的方法可以再自行搜索学习,以求不断地进步,希望对大家有所帮助,看完有帮助的话不要忘记点个赞鼓励鼓励我!我先给自己点个赞。