zoukankan      html  css  js  c++  java
  • Java 几道常见String面试题

    1 String s1="abc";
    2 String s2="abc";
    3 System.out.println(s1==s2);
    4 System.out.println(s1.equals(s2));
    5 /*output:
    6 true
    7 true
    8 */

    本题主要考察对于java常量池的理解。java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。根据代码顺序,先在常量池中创建”abc“,并指向s1,而后在创建s2时,由于常量池中已经存在”abc“,只需指向s2就可以,而不需要再创建。”==”在这里比较的是对象引用,故结果为”true”,String 中的equals方法经过重写后操作为“比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true”。很明显,s1和s2的字符序列相同,故而结果为true。
    (2)“ String s1=new String(“abc”)”语句创建了几个对象?
    该语句首先String s1是声明,new String(“abc”)先在常量池中查找,若没有则创建“abc”,而后通过new在堆内存中创建对象,把“abc”拷贝赋值。String 定义为初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。故创建常量池和堆内存中两个对象,两个对象的地址值不一样。
    (3)

    1 String s1=new String("abc");
    2 String s2="abc";
    3 System.out.println(s1==s2); 
    4 System.out.println(s1.equals(s2));
    5 /*output:
    6 false
    7 true
    8 */

    由(2)分析可知s1在堆内存中,s2在常量池中,故结果为false,true 
    (4)

    1 String s1="a"+"b"+"c";
    2 String s2="abc";
    3 System.out.println(s1==s2);
    4 System.out.println(s1.equals(s2));
    5 /*output:
    6 true
    7 true
    8 */

    本题主要考察java中常量优化机制,编译时s1已经成为“abc”在常量池中查找创建,s2不需要再创建。 
    (5)

    1 String s1="ab";
    2 String s2="abc";
    3 String s3=s1+"c";
    4 System.out.println(s3==s2);
    5 System.out.println(s3.equals(s2));
    6 /*output:
    7 false
    8 true
    9 */

    Java 语言提供对字符串串联符号(”+”)和其他对象到字符串的转换的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的,字符串转换是通过 toString 方法实现的。在本题中,先在常量池中创建”ab“,地址指向s1,再创建”abc”,指向s2。对于s3,先创建StringBuilder(或 StringBuffer)对象,通过append连接得到“abc”,再调用toString()转换得到的地址指向s3。故(s3==s2)为false.

  • 相关阅读:
    Linux下处理文件中的^M
    python selenium-webdriver 生成测试报告 (十四)
    Apache 配置Https 转发Tomcat Http
    自动化测试神器 之 python unittest 断言
    创建高性能索引笔记
    【转】正向代理vs反向代理
    vue 常用问题
    eslint 代码规范2
    WebStrom2018注册码
    Vue-selller 饿了吗
  • 原文地址:https://www.cnblogs.com/laojiao/p/10026635.html
Copyright © 2011-2022 走看看