String
1.String表示字符串的类型,他属于引用数据类型
2.在Java中使用双引号括起来的都是String对象,而且括起来的字符串是不可以更改的。
3.括起来的字符串都直接存储在了方法区的“字符串常量池中”,这个样子可以提高执行效率。
eg:
public static Stringtest01{
public static void main(string[]args){
String s1="abc";
String s2="abc"+"xy";
String s3=new string(Original:"abc");
}
}
new时新开辟了一个空间,在堆里保存了他的地址,指向string对象内容。
代码图解
String字符串的存储方式
public class User{
private int id;
private String name;
public User(int id,string name){
this.id=id;
this.name=name;
}
}
public class Usertest{
public static void main(string[]args){
User user=new User(id:110,name:"张三");
}
}
代码图解:
如图所示,ID保存的是他的内容,name里保存的是他的地址,而不是内容。
==和equals()的区别
- ==的使用
1.==是一个运算符
2.在基本数据类型变量和引用数据类型变量中出现
3.如果比较的是基本数据类型变量,比较的两个变量保存的内容,如果是引用数据类型变量,比较的是两个对象的地址值,即两个引用是否指向同一个对象 - equals()方法的使用
1.他是个方法,适用于引用数据类型。
2.Object类中定义的equals()方法和==的作用相同。
3.String、Date、File、包装类等都重写了这个equals()方法,重写后比较的是内容而不是地址。
equals在String类中可以比较字符串内容
public class stringtest02{
public static void main(string[]args){
String s1="hello";
String s2="hello";
//这个时候hello已经在字符串常量池中,故s2不会再新建了,因为已经存在。
System.out.println(s1==s2);//双等号在string类中比较的是字符串地址,结果为true
String x=new String(original:"xyz");
String y=new String(original:"xyz");
System.out.println(x == y);//此时的结果是false
System.out.println(x.equals(y));//调用String类中的equals方法,比较的是字符串的内容。
//这种也可以写作:
System.out.println("xyz".equals(x));
//或者是
System.out.println(x.equals("xyz"));
//但一般使用第一种可以避免空指针异常,因为当String x=null;时第一种结果是false,第二种则是报错。
}
}
代码图解:
String类的构造方法
-
byte[] bytes={97,98,99};
String s2=new String(bytes);
System.out.println(s2);
输出的是:abc
byte可以将数字自动转换成对应的字符,进行输出。
输出一个引用时,会自动调用to string方法,如果是object的话,会输出对象对应的内存地址。而string类已经重写了这个方法,会输出字符串本身。 -
String s3=new string(byte offect:1,length:2);
System.out,println(s3);
输出结果是:bc
第一个代表起始位数组,第二位代表往后延伸的长度 -
char []chars={‘我’,‘是’,‘中’,‘国’,‘人’};
String s4=new string(chars);
system.out.println(s4);
可以将数组转换成字符串 -
String s5=new String(char,2,3);
System.out.println(s5);
可以将一部分改为字符串
String类的常用方法
char c ="中国人“.charAt(1);
System.out.println(c);
结果会输出国字。==char charAt(int index)==返回指定索引处的char值。
2.
int copareTo(String antherString)
//当进行字符串之间的大小比较时使用。
eg:
int result ="abc".compareTo("abc");
System.out.println(result);
//结果为0,前后一致。
int result2 ="abcd".compareTo("abce");
System.out.println(result2);
//结果为-1,前小后大。(8-9=-1)
int result3="abce".compareTo("abcd");
System.out.println(result3);
//结果为1,前大后小。
int result4 ="xyz".compareTo("yxz");
System.out.println(result4);
//结果为-1,当字符串第一个字母和后面字符串的第一个字母比较,能分出胜负就不在比较了。
.bolean contains(CharSequence s)
//判断前面的字符串中是否包含后面的字符串。
eg
System.out.println("HelloWorld.java".contains(".java");
//输出结果为true
System.out.println("http://www".contains("https://");
//输出结果为false。
boolean endwith(String uffix)
//判断当前字符串是否以某个字符串结尾。
使用:
System.out.println(test.txt".enfWith(".java");
//输出结果为false。