• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

有关于 String 类的面试题

技术杂谈 勤劳的小蚂蚁 3个月前 (02-04) 65次浏览 已收录 0个评论 扫描二维码

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)需要进行循环判断

代码:

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

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:有关于 String 类的面试题
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00