字符串基础总结

字符串
字符串就是多个字符组成的一串数据,也可以看成是一个字符数组。同时字符串是常量,一旦被赋值就不可以被改变。
字符串的方法
1.空构造

public String(){}
eg:String s1=new String();
System.out.println(s1);//直接调用对象名称,其本质是调用了对象的toString方法(对toString进行了重写)

2.把字节数组转换成字符串

public String (bytes[] bytes)
eg:byte[] by={99,98,97,96};
String s=new String(by);
System.ou.println(s);

3.把字节数组的一部分转换为字符串

public String(byte[] by,int index,int length)
eg:byte[] by={99,98,97,96};
String s=new String(by,1,3);//将字节数组by索引为1开始,向后取3个转换为字符串
System.ou.println(s);

4.把字符数组转换为字符串

public String(char[] ch)
eg:char[] by={'a','b','c'};
String s=new String(ch);
System.out.println(s);

5.把字符数组的一部分转换为字符串

public String(char[] ch,int index,int count)
eg:char[] by={'a','b','c''d','e'};
String s=new String(ch,1,3);
System.out.println(s);

字符串的特点与赋值方式
1.字符串是常量,一旦被赋值就不会被改变,值的是值不会被改变
2.字符串的赋值方式是,先到常量池中去寻找有没有要赋值的常量,如果有则直接返回,没有则在常量池中创建并返回。
相关面试题:
面试题1

String s1 =new String("hello java");
String s2="hello java";
s1 和s2有区别吗?

该题就是主要考察字符串的赋值方式。
首先s1和s2是有区别的。对于第一个语句,首先会在栈中创建一个对象s1,在等号右边通过new关键字又会在堆中创建一个对象,即会在堆中开辟一个新的空间,也就是说第一个语句创建了2个对象,都有自己的地址值,而“hello Java ”是一个字符串常量会被放在方法区的常量池里,通过把自己得地址值给堆中的对象,然后堆中的对象会把自己的引用给对象s1.其过程是:
s1—>new String()—>”hello java”
对于第二条语句:直接把常量池中的“hello Java”赋值给对象s2,所以s2会直接去常量池中去找有没有‘’hello java‘’这个常量,有的话则直接返回,整个过程只创建一个对象。

面试题2:
“==”和equals的区别?
==和equals本身都是比较对象的地址值是否一样,然而由于String Math等包装类(Integer、 Long、Character、Boolean、Byte、Double、Float 、Short)对equals方法进行了重写,所以这些类对对象的比较一般是对对象的内容进行比较,即比较的是对象的数据是否一样。同时需要注意的是StringBuffer虽然是字符串缓冲区,但并没有对equals方法进行重写,所以在StringBuffer中equals方法比较的是依然是对象的地址值,同时在八大基本数据类型数据进行比较时,只能用“==”比较,不存在equals,否则编译不通过。
具体参考另一篇文章“==”与equals方法的具体区别

猜你喜欢

转载自blog.csdn.net/lpq1201/article/details/80382198
今日推荐