zoukankan      html  css  js  c++  java
  • Java中创建String的两道面试题及详解

    我们知道创建一个String类型的变量一般有以下两种方法:

    String str1 = "abcd";
    String str2 = new String("abcd");

    那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?

    下面来看下面两道经常遇到的面试题。

    面试题1:
    String a = "abcd";
    String b = "abcd";
    System.out.println(a == b);  // true
    System.out.println(a.equals(b)); // true

    解析:

    用”“创建的a,b两个字符串,==和equals比较返回都为true,这是因为a,b都指向了方法区的同一个字符串。所以,当同样的一个字符串用”“重复创建时只在方法区创建一次。

    面试题2:
    String c = new String("abcd");
    String d = new String("abcd");
    System.out.println(c == d);  // false
    System.out.println(c.equals(d)); // true

    解析:

    用new创建的c,d两个字符串,equals为true很简单因为equals永远比较的是值,而==为false说明两个字符串的引用不一样。用new创建的字符串每次都会在JVM堆中创建,所以c,d都对应堆中的两个不同的字符串。

    关于这两道题中的”“和new创建的字符串在内存中的表现形式可以看下图就明白了。

    image

    推荐阅读

    干货:免费领取2TB架构师四阶段视频教程

    面经:史上最全Java多线程面试题及答案

    工具:推荐一款在线创作流程图、思维导图软件

    分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

  • 相关阅读:
    day32-python阶段性复习六
    golang 项目中坑
    golang crawler
    router
    golang in ubuntu
    go channel 案例分析
    go channel learning
    bee go + mgo
    URL escape and unescape
    [转]good sample of Go
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952591.html
Copyright © 2011-2022 走看看