String的概念
字符串类型。string 类代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区(StringBuilder和StringBuffer)支持可变的字符串。因为String对象是不可变的,所以可以共享数据(共享机制)。例如: String str = "abc;
- String的值是常量
- String对象是不可变的,不能通过赋值的方式修改
- String的值是共享的,共享机制
- 一般用在赋值和字符串连接比较少的情况;如果赋值和字符串连接次数频繁,一般用StringBuilder和StringBuffer
String类面试题
- 题1
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//True
System.out.println(s1.equals(s2));//True
- 题2
1、首先将方法、变量名s进栈
2、new出的对象存在堆中,生成一个地址
3、“abc”作为常量又存在方法区的常量池中,生成一个地址
4、堆中存的对象里面存的是常量的地址
所以一共有2个对象
String s=new String("abc");//创建了两个对象
- 题3
String s1="abc";
String s2=new String("abc");
System.out.println(s1==s2);//False
System.out.println(s1.equals(s2));//True
s1、s2地址不同,但最后都指向常量池中的“abc”。
String类型作为形参进行值传递
String类型,Double,Integer(是基本类型的包装类),比较特殊,每次传递的时候,这3中类型都会创建新的对象,不指向以前的内存空间,所以不对实参有影响。字符串的值不能修改只会在常量池再创建一个对象。
java常用的字符编码
- 字符集编码有哪些?
1、中文GB2312编码集︰规定了中文的编码格式,等。
2、中文GBK编码集:规定了中文的编码格式,等。
3、万国码UTF-8编码集︰国际通用标准:中文、很多国家的语言
4、ASCII码
5、拉丁文iso-8859:不支持中文
编码和解码
- 编码:把字符串转换成计算机可以识别的符号
String str="中文";
byte[] b=str.getBytes();
System.out.println(Arrays.toString(b));
- 解码:把计算的符号转换成字符串格式
String str="中文";
byte[] b=str.getBytes();//编码
System.out.println(Arrays.toString(b));
String s=new String(b);//解码
System.out.println(s);
char数组和string互相转换
- String类型转char数组
String str="adjghaeuig";
char[] c=str.toCharArray();
System.out.println(Arrays.toString(c));
char[] c=str.toCharArray();
System.out.println(Arrays.toString(c));
String s=new String(c);
System.out.println(s);
String转换为char类型
- String类的charAt();
- toCharArray()[];下标获取
String的实例方法
- 字符串拼接
String str="adjghaeuig";
String str1=str.concat("123");
System.out.println(str1);
str+="123";
System.out.println(str);
- 查询指定字符串
System.out.println(str.contains("123"));
- 判断是否以指定字符串后缀结尾
str.endWith();
- 比较两个字符串,忽略大小写
str.equalsIgnoreCase(str2)
- 返回指定字符串在原字符串第一次出现的索引(可指定开始搜索的位置)
str.indexOf()
字符串缓冲区
String类面试题
- 题1
String s1="a"+"b"+"c";
String s2="abc";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
- 题2
String s1="ab";
String s2="abc";
String s3=s1+"c";
System.out.println(s3==s2);//false
System.out.println(s3.equals(s2));//true