有关于 String 类的面试题
上次写了关于 String 类的一些方法
今天我们来做一些
关于 String 类的面试题
关于 String类 的常见面试题
1)判断String类型的 s1 和 s2 是否相等
equals() 方法比较的是字符串的内容~所以结果是 true 很好理解,至于 str1==str2 的结果也是 true ,是因为在 Java 的内存的方法区中有一块区域叫做常量池,str1 =“abc” 时,常量池中没有 “abc”,所以就 new 一个 “abc” 当运行 str2 = “abc” 时,常量池中存在 “abc” ,系统就会把 常量池中的 “abc” 的引用直接给 str2 所以 str1==str2 的结果为 true,因为它们的引用是一样的~
2)判断String类型的 s1 和 s2 是否相等
这个和上一题很像,但是 str1 是 new string() ,在 Java 中,new 一个对象就会在内存的堆中开辟一块空间,然后把引用赋值给 str1 ,一个是堆中的引用,一个是常量池中的引用所以,str1==str2 的结果为 false~~
3)判断String类型的 s1 和 s2 是否相等
这个 str1==str2 为何为 true 小伙伴们知道吗?嘿嘿因为在Java中有一种叫做常量优化的机制,我们在赋值的时候 “a”,“b”,“c”都是常量,系统及直接把 abc 赋值给 str1 了,这时候常量池中也就存在 “abc” 了,所以str1==str2
4)判断String类型的 s1 和 s2 是否相等
那么这里呢?通过查找API我们可以得到这样一段话~ 『Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的...』
也就是说当执行 str3=str1+c 的时候,首先在堆中生成一个StringBuilder(或StringBuffer)对象,然后把 ab 和 c 连接在一起 ,再利用 toString 方法生成一个 “abc”的字符串 再来进行比较..str2 的 “abc” 在常量池中,str3 在堆中所以为false~
一个 str1==str2 就玩了这么多花样
真会玩~~
我们在玩点别的
模拟登陆
需求:
给三次机会,并且提示还有几次
分析:
1)需要键盘输入账户名和密码
2)需要进行循环判断
代码:
public class Test1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for(int i=0; i<3; i++){
System.out.println("请输入用户名");
String userName = in.nextLine();
System.out.println("请输入密码");
String password = in.nextLine();
if ("admin".equals(userName)&&"admin".equals(password)) {
System.out.println("欢迎"+userName+"!!!");
break;
}else{
System.out.println("用户名或密码错误~~");
System.out.println("还有"+(2-i)+"次机会");
}
}
}
}
今天就到这了
拜拜