有关于 String 类的面试题


1)判断String类型的 s1 和 s2 是否相等

有关于 String 类的面试题

equals() 方法比较的是字符串的内容~所以结果是 true 很好理解,至于 str1==str2  的结果也是 true ,是因为在 Java 的内存的方法区中有一块区域叫做常量池,str1 =“abc” 时,常量池中没有 “abc”,所以就 new 一个 “abc” 当运行 str2 = “abc” 时,常量池中存在 “abc” ,系统就会把 常量池中的 “abc” 的引用直接给 str2 所以 str1==str2 的结果为 true,因为它们的引用是一样的~

2)判断String类型的 s1 和 s2 是否相等

有关于 String 类的面试题

这个和上一题很像,但是 str1 是 new string() ,在 Java 中,new 一个对象就会在内存的堆中开辟一块空间,然后把引用赋值给 str1 ,一个是堆中的引用,一个是常量池中的引用所以,str1==str2 的结果为 false~~

3)判断String类型的 s1 和 s2 是否相等

有关于 String 类的面试题

这个 str1==str2 为何为 true 小伙伴们知道吗?嘿嘿因为在Java中有一种叫做常量优化的机制,我们在赋值的时候 “a”,“b”,“c”都是常量,系统及直接把 abc 赋值给 str1 了,这时候常量池中也就存在 “abc” 了,所以str1==str2 

4)判断String类型的 s1 和 s2 是否相等

有关于 String 类的面试题

那么这里呢?通过查找API我们可以得到这样一段话~ 『Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的…』

也就是说当执行 str3=str1+c 的时候,首先在堆中生成一个StringBuilder(或StringBuffer)对象,然后把 ab 和 c 连接在一起 ,再利用 toString 方法生成一个 “abc”的字符串 再来进行比较..str2 的 “abc” 在常量池中,str3 在堆中所以为false~

一个 str1==str2 就玩了这么多花样
真会玩~~
我们在玩点别的

模拟登陆

需求:
给三次机会,并且提示还有几次
分析:
1)需要键盘输入账户名和密码
2)需要进行循环判断

有关于 String 类的面试题

代码:

publicclassTest1 {

 publicstaticvoidmain(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)+“次机会”);
     }
   }  
 }
}
本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » 有关于 String 类的面试题
分享到:
赞(0)

评论抢沙发

评论前必须登录!