V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huiyue
V2EX  ›  Java

老生常谈的 Java 面试题 字符相等

  •  
  •   huiyue · 2017-03-24 13:56:08 +08:00 · 3592 次点击
    这是一个创建于 2809 天前的主题,其中的信息可能已经有所发展或是发生改变。
    String a="abc";
    String b="abc";
    System.out.println(a==b);
    10 条回复    2017-03-30 17:01:30 +08:00
    Troevil
        1
    Troevil  
       2017-03-24 13:58:14 +08:00
    String a="abc";
    String b="abc";
    System.out.println(a==b);
    String c=new String("abc");
    System.out.println(b==c);
    misaka19000
        2
    misaka19000  
       2017-03-24 14:19:12 +08:00 via Android
    我想起来 r 大的那篇文章了
    murmur
        3
    murmur  
       2017-03-24 14:20:04 +08:00   ❤️ 1
    所以最简单的不就是把用=判断相等的打死不就完了
    Chrisplus
        4
    Chrisplus  
       2017-03-24 14:33:58 +08:00
    '''
    In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable. Interning strings makes some string processing tasks more time- or space-efficient at the cost of requiring more time when the string is created or interned. The distinct values are stored in a string intern pool.
    '''
    shalk
        5
    shalk  
       2017-03-25 13:08:53 +08:00
    == 用于基本类型的比较,对象会直接比较引用
    对象建议用 equals 比较,但需要实现这个方法。

    String 作为对象也按照这个规则,但是它有一个 String Pool 的概念( http://stackoverflow.com/questions/3052442/what-is-the-difference-between-text-and-new-stringtext
    cwek
        7
    cwek  
       2017-03-28 15:44:50 +08:00
    String 是对象,==对于对象判断引用一致。
    字面 String 常量,还要包括编译器常量折叠后的,通过常量池实现引用一致,通过运行期 new 出来的都在堆中,肯定引用不一致。
    intern()方法在 java 版本有不同
    运行期 String.intern()会查找 String 缓存池有没相同内容的,有则返回相同引用。
    但:
    1.6 及之前,没则复制一份到 String 常量池,并返回引用,引用对象相同。
    1.7 及之后,没则复制一个堆引用到 String 常量池并返回,实际返回的还是堆引用,与常量引用不同。
    huiyue
        8
    huiyue  
    OP
       2017-03-28 20:29:04 +08:00
    @Troevil @misaka19000 @cwek @shalk @Chrisplus @murmur @cs4814751 回复一下。这是公司的一道面试题。但面试里面 5 年以下工作经验的,答对的不多。
    misaka19000
        9
    misaka19000  
       2017-03-28 20:50:33 +08:00 via Android
    @huiyue 只能说你们公司技术太烂,面试的都是些什么人
    huiyue
        10
    huiyue  
    OP
       2017-03-30 17:01:30 +08:00
    @misaka19000 很有道理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2605 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:39 · PVG 18:39 · LAX 02:39 · JFK 05:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.