zoukankan      html  css  js  c++  java
  • String类的常见面试题(3)

    1.判断定义为String类型的s1和s2是否相等

      String s1 = "abc";    //这个“abc”对象首先会进常量池

      String s2 = "abc";    //这行会先看常量池有没有“abc”对象 没有才到栈哪里去创建 否则直接记录它

      System.out.println(s1 == s2);
      System.out.println(s1.equals(s2))

      事实上两个输出都是为true。原因看注释。

    2:这句话中创建几个对象?

      String s = new String("abc");

      答案:2个。一个在常量池中,一个在堆中(就是常量池的副本,上一节提到过)

    3:判断真假

      String s1 = new String("abc");

      String s2 = "abc"; 

      System.out.println(s1 == s2);  // false  (堆)==(常量池)
      System.out.println(s1.equals(s2))   //  true 序列一样

    4:判断真假

      String s1 = "a"+"b"+"c"; //在编译的时候已经是“abc“字符串了,所以放到了常量池

      Sreing s2 = "abc";

      System.out.println(s1 == s2);  // true java中有常量优化机制 
      System.out.println(s1.equals(s2))   //  true 序列一样

    5:判断真假

      String s1 = "ab";

      String s2 = "abc";

      String s3 = s1+"c";  

       System.out.println(s2 == s3);  // false s2在常量池中,s3在栈中
      System.out.println(s2.equals(s3))   //  true 序列一样

      如图所示:

      这个是java api的描述 (截图了)

      

       

    意思就是当有“+”的时候,底层都会new一个StringBuffer()对象,然后该对象会调用tostring()方法转换-->new String()对象。然后就有了地址。。。

  • 相关阅读:
    A. SwapSort
    D. A Shade of Moonlight
    利用DataSet更改数据,将更改保存到数据库中
    接口设计与数据同步解决方案小结
    SQL 判断 ‘表,存储过程,函数 ...’ 已是否存在
    SQL Server系统表sysobjects介绍与使用
    【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)
    SQL 常用语句
    网页开发 组件
    中文版的jqGrid实例大全
  • 原文地址:https://www.cnblogs.com/blue-crystal/p/7536485.html
Copyright © 2011-2022 走看看