有关于 String 类的面试题

上次写了关于 String 类的一些方法

今天我们来做一些

关于 String 类的面试题


关于 String类 的常见面试题


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


一个 str1==str2 就玩了这么多花样

真会玩~~

我们在玩点别的


模拟登陆


需求:

给三次机会,并且提示还有几次

分析:

1)需要键盘输入账户名和密码

2)需要进行循环判断


640?wx_fmt=jpeg


代码:


 
  

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)+"次机会");
     }
   }  
 }
}


今天就到这了

拜拜

猜你喜欢

转载自blog.csdn.net/y0q2t57s/article/details/81008865