zoukankan      html  css  js  c++  java
  • String知识点

    String知识点

    String面试题

    String是不可变的有什么好处?

    String是不可变类有以下几个优点

    • String不可变,所以线程安全。
    • 以String作为HashMap的key,String的不可变保证了hash值的不可变。
    • 因为java字符串是不可变的,可以在java运行时节省大量java堆空间。因为不同的字符串变量可以引用池中的相同的字符串。如果字符串是可变得话,任何一个变量的值改变,就会反射到其他变量,那字符串池也就没有任何意义了。

    如何分割一个String?

    用split()方法进行分割。

    如何判断两个String是否相等?

    有两种方式判断字符串是否相等,使用""或者使用equals方法。当使用""操作符时,不仅比较字符串的值,还会比较引用的内存地址。大多数情况下,我们只需要判断值是否相等,此时用equals方法比较即可。

    还有一个equalsIgnoreCase可以用来忽略大小写进行比较。

    String的intern()方法

    当intern()方法被调用,如果字符串池中含有一个字符串和当前调用方法的字符串eqauls相等,那么就会返回池中的字符串。如果池中没有的话,则首先将当前字符串加入到池中,然后返回引用。

    String是线程安全的吗?

    String是不可变类,一旦创建了String对象,我们就无法改变它的值。因此,它是线程安全的,可以安全地用于多线程环境中。

    为什么我们在使用HashMap的时候总是用String做key?

    因为字符串是不可变的,当创建字符串时,它的它的hashcode被缓存下来,不需要再次计算。因为HashMap内部实现是通过key的hashcode来确定value的存储位置,所以相比于其他对象更快。这也是为什么我们平时都使用String作为HashMap对象。

    String编程题

    1、下面的代码输入什么

    String s1 = new String("abc");
    String s2 = new String("abc");
    System.out.println(s1 == s2);
    

    输入false

    2、下面的代码输入什么

    String s1 = "abc";
    StringBuffer s2 = new StringBuffer(s1);
    System.out.println(s1.equals(s2));
    

    输入false,因为s2不是String类型,String的equals方法进行了类型判断。

    3、下面的代码输入什么

    String s1 = "abc";
    String s2 = new String("abc");
    s2.intern();
    System.out.println(s1 ==s2);
    

    输出false,intern()方法将返回从字符串池中的字符串对象的引用,但因为我们没有分配到S2,S2没有变化,如果该第三行代码为s2 =

    s2.intern(),则输入true。

    4、下面的代码将创建几个字符串对象。

    String s1 = new String("Hello");  
    String s2 = new String("Hello");
    

    答案是3个对象.

    第一,行1 字符串池中的“hello”对象。

    第二,行1,在堆内存中带有值“hello”的新字符串。

    第三,行2,在堆内存中带有“hello”的新字符串。这里“hello”字符串池中的字符串被重用。

  • 相关阅读:
    ajax跨域
    抽奖概率计算
    应用版本
    empty
    java线程池原理
    java队列
    jquery选择器项目实例分析
    jquery操作dom
    40款非常棒的 jQuery 插件和制作教程(系列一)
    vijosP1046 观光旅游(最小环)
  • 原文地址:https://www.cnblogs.com/yu-si/p/14507222.html
Copyright © 2011-2022 走看看