String类是一个字符串类型的类,使用“xxxx”定义的内容都是字符串,虽然这个类在使用上有一些特殊,但是String本身是一个类。
一.String的实例化两种方式
1.直接赋值实例化
String Name = "xxxx";
以上是String对象的直接赋值,以上的代码并没有使用关键字new进行。String类也是类,所以也有构造方法
2.使用构造方法实例化
public String(String str);
可以通过构造方法为String类对象实例话,但在构造里面依然要接收一个本类对象
二.字符串的比较
先看一个例子
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
运行结果为
true
true
== 比较两个对象是否相同:地址
equals 比较内容是否相同
可以看出,内容相同的字符串,可以享用的同一片内存空间
再来看第二个例子:
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str3);
System.out.println(str1.equals(str3));
运行结果 第一个为false第二个为true
当我们使用new来构造字符串对象的时候,不管字符串常量池中有没有相同内容的对象的引用,新的字符串对象都会创建。
我们再用内存关系图来分析
字符串的应用
1.使用字节数组 创建一个字符串
byte[] name = {'A','b','c'};
String str4 = new String(name);
System.out.println(str4);
byte[] name2 = {97,98,99};
String str5 = new String(name2);
System.out.println(str5);
运行结果
Abc
abc
2.使用字节数组的一部分 创建一个字符串
String str6 = new String(name,0,2);//从byte[0]开始,共有两个字节
System.out.println(str6);
运行结果
Ab
3.获取字符串中的一个字符
charAt
char[] hello = {'你','好','啊'};
String h = new String(hello);
System.out.println(h);
char c = h.charAt(0);
System.out.println(c);
运行结果为
你好啊
你
4.两个字符串的比较 compareTo
可以知道大小关系 0 : 相同 >0:大于 <0:小于
int result = str4.compareTo(str1);
System.out.println(result);
运行结果
-32
5.两个字符串的连接
concat
String nStr = str5.concat(h);
System.out.println(nStr);
运行结果
abc你好啊
6.判断一个字符是否包含另外一个字符串
contains
boolean r = "hello".contains("lle");
System.out.println(r);
运行结果
flase
7.判断是否以某个字符串结尾
String url = "http://www.baidu.com";
if (url.endsWith(".com")){
System.out.println("网址");
}
if (url.startsWith("www",7)){
System.out.println("万维网");
}
运行结果
网址
万维网
8.两个字符串进行比较
equals
if ("abc".equals("ABC")){
System.out.println("相同");
}else {
System.out.println("不相同");
}
运行结果
不相同
9.判断一个子类字符串在另外一个字符串里面的位置
indexOf 不存在返回值为-1
String i1 = "hello java";
int index = i1.indexOf("javeee");
System.out.println(index);
运行结果
-1
10.获取字符串的长度
length
-
获取字符串
substring 从index到结尾String sStr = i1.substring(6); System.out.println(sStr);
运行结果
java
从0开始 到5
String sStr2 = i1.substring(0,5);
System.out.println(sStr2);
运行结果
hello
12.将字符串转化为字符数组
toCharArray
13.将所有字符化为小写
toLowerCase/toUpperCase
14.将字符串前面和后面的空格字符删除
trim()
15.可变字符串
StringBuffer 线程安全 效率不高
StringBuilder 线程不安全 效率更高
insert append delete replace
创建的同时先准备好6个字符的空间
StringBuilder sb = new StringBuilder(6);
append 在末尾追加
sb.append("I");
sb.append("Love");
sb.append("Android");
System.out.println(sb);
运行结果
ILoveAndroid
replace 替换
start and end
int start = sb.indexOf("Android");
int end = start + "Android".length();
sb.replace(start,end,"You");
System.out.println(sb);
运行结果
ILoveYou
reverse 反转
sb.reverse();
System.out.println(sb);
运行结果
uoYevoLI