1、字符串(String)
①字符串是属于引用数据类型。
②String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。
package cn.tx.string;
public class StringDemo1 {
public static void main(String[] args) {
//定义一个字符串变量,赋值“ffx”
String str = "ffx";
System.out.println("输出str:"+str);
}
}
2、字符串的构造器
常用的构造器:
例子如下:
public class StringDemo2 {
public static void main(String[] args) {
//创建一个空字符串的对象
String s = new String();
System.out.println("输出字符串s:"+s);
//创建一个字节数组
byte[] bs ={96,97,99,105,108};
//以字节数组作为参数的字符串对象的创建
String s1 = new String(bs);
//把字节数组中的每一个数值转换成相应的ascii的zifu后组装成字符串
System.out.println("以字节数组作为参数创建字符串:"+s1);
//第一个参数是字节数组,第二个参数是以指定索引开始(0开始),第三个参数是截取的长度,注意数组不要越界
String s2 = new String(bs,3,2);
System.out.println("以字节数组作为参数的字符串截取创建:"+s2);
//创建一个字符数组
char[] cs ={'a','c','f','f','x','u'};
String s3 = new String(cs);
System.out.println("以字符数组作为参数创建字符串:"+s3);
String s4 = new String(cs,3,2);
System.out.println("以字符数组作为参数的字符串截取创建:"+s4);
//以常量的字符串作为参数
String s5 = new String("ffxilu");
System.out.println("以常量字符串作为参数:"+s5);
}
}
3、最常见的面试题
String s1 = new String(“abc”);和String s2 = “abc”;有什么区别?
前者创建了两个对象,后者创建一个对象。
== :比较基本类型,比较值是否相同。比较引用类型,比较地址值是否相同。
equals();:比较引用类型默认比较的是地址是否相同,对于一般的引用类型都会重写该方法,一个类具体比较的是什么我们就得分析源码。
具体看代码:
public class StringDemo3 {
public static void main(String[] args) {
//创建常理的字符串
String str = "helloworld";
//创建字符串的对象
String str1 = new String("helloworld");
//两个字符串地址的比较
System.out.println(str == str1);
//两个字符串的值比较
System.out.println(str.equals(str1));
//定义一个字符串的常量
String str2 = "renliang";
String str3 = "renliang";
//判断两个地址是否相等,比较的是地址
System.out.println(str2 == str3);
System.out.println(str2.equals(str3));
String str4 = "hello";
String str5 = "world";
String str6 = "helloworld";
//str4和str5拼接后一定会产生新的字符串(即使在数据共享区中存储拼接后的值相等的字符串)
System.out.println(str6 == (str4+str5));
//如果是两个没有引用的常量做拼接那么就会去数据共享区中查找是否有相等的字符串,如果有相等的就不去创建新的字符串了,直接使用。
System.out.println(str6 == ("hello"+"world"));
}
}