1. == 和 equals 方法的区别 ,这是面试必问的问题
"=="比较的是引用(是否指向同一个内存块),“equals”比较的是具体的内容
String name1="张三" //直接赋值方式
String name2=new String("张三"); //new对象方式
String name3=name2 ; //传递引用
name1==name2 false
name1==name3 false
name2==name3 true
name1.equals(name2) true
name1.equals(name3) true
name2.equals(name3) true
原理:由于常量池不存在两个相同的对象,所以name2和name3都指向JVM字符串常量池中"张三" 对象。
而new关键字一定会产生一个对象,并且这个对象是存放在堆中的,所以String name2=new String("张三");
产生两个对象,保存在栈中的name2和保存在堆中的张三,
2.String 两种实列化方式区别
直接赋值方式:创建的对象放在字符串对象池里,如果存在就不创建
new对象方式:每次都创建新的对象
String实例的值是通过字符数组实现字符串存储的。
3.字符串特性:
不能改变字符串的内容,要想改变,只能通过指向一个新的内存地址。因为在源码中其是非final修饰的,意味着其不能
被继承,并且其成员value也是final,因此字符串一旦创立就不能修改。
4.String常见的方法:
4.1 charAt :返回指定索引处的char值,索引范围为0-----length()-1
String name="张三"
char ming =name.charAt(1)
4.2 length():返回字符串的长度
4.3 indexof:返回指定字符串在此字符串中第一次出现的处的索引
String str="sadasd";
str.indexof("d");
4.4 substring(int beginIndex int endIndex)
返回一个新字符串,该字符串从指定的beginIndex处开始,直达索引endIndex -1处的字符,其长度为endIndex-beginIndex
包含起始字符,不包含结束字符
String str1="不开心每一天,不可能"
str.substring(1,6)
结果:开心每一天
4.5 toUpperCase() :全变成大写
tolowercase(): 全变成小写
4.6 Trim():去掉字符串前后空格
5."+"连接符解析
其原理是通过StringBuilder以及append方法实现的,在实际代码编程中,使用+和使用StringBuilder以及append方法
来拼接字符串对象是等价的。
注意:如果大量StringBuilder创建在堆内存中,必然会造成效率的损失,所以这种情况下建议在循环体外创建
一个StringBuilder对象调用append方法手动拼接
6 问题 题统计newStr中出现的英文字符 空格 其他的个数
String str ="asdaf ddcxzcsd2312”
int kongge=0
int yingwen=0
int qita=0;
for(int i=0; i<newStr.length();i++){
char c=newStr.charAt(i);
if(( c>= ‘a’&&c<'z‘)||( c>= ‘A’&&c<'Z‘){
yingwen++}
else if(c== ‘’ ”){
kongge++
} else{
qita++
}
}