`
unique5945
  • 浏览: 136795 次
  • 来自: 杭州
社区版块
存档分类
最新评论

java面试中关于String的常见问题

    博客分类:
  • JAVA
阅读更多
以下内容是看了浪曦教学视频做的笔记!

问题1:
String s = new String("abc");
String s1 = "abc";
String s2 = new String("abc");

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

请问以上程序执行结果是什么?

第一句执行后内存中有两个对象,而不是一个。一个由new String("abc")中的"abc"在String Pool里生成一个值为"abc"的对象;第二个由new在堆里产生一个值为"abc"的对象,该对象完全是String Pool里的"abc"的一个拷贝。变量s最后指向堆中产生的"abc"对象;
第二句执行时,s1先去String Pool找是否有值为"abc"的对象,很显然在上一步中java已经在String Pool里生成一个"abc"对象了,所以s1直接指向String Pool中的这个"abc";
第三句中又有一个new,在java中凡遇到new时,都会在堆里产生一个新的对象。因此,该句执行后堆里又多了一个"abc"对象,这与执行第一句后生成的"abc"是不同的两个对象,s2最后指向这个新生成的对象。
因此,执行后面的打印语句的结果是三个false

问题2:
System.out.println(s == s.intern());
System.out.println(s1 == s1.intern());
System.out.println(s1.intern() == s2.intern());

请问以上程序执行结果是什么?

设s为String类型的变量,当执行s.intern()时,java先在String Pool里找与字符串变量s相等(用equals()方法)的字符串,若有则将其引用返回;若没有则在String Pool里创建一个与s的值相等的字符串对象,并将其引用返回。从中我们可以总结出intern()方法无论如何都将返回String Pool里的字符串对象的引用。
因此,以上程序执行的结果是falsetruetrue
PS:设s和t为两个字符串变量,若有s.equals(t),必有s.intern() == t.intern();
PS:"=="永远比较的是两边对象的地址是否相等。

问题3:
String hello = "hello";
String hel = "hel";
String lo = "lo";
System.out.println(hello == "hel" + "lo");
System.out.println(hello == "hel" + lo);

请问以上程序执行结果是什么?

前三句在String Pool里分别产生“hello”、“hel”、“lo”三个常量字符串对象
当做第一个加法连接时,+号两边都是常量字符串,java就会将两者拼起来后到String Pool里找与之相等(用equals)的字符串,若存在则将其地址返回;不存在则在String Pool里新建一个常量对象,其值等于拼接后的字符串,并将其地址返回。
第二个+号两边有一个是变量,此时,java会在堆里新建一个对象,其值是两字符串拼接后的值,此时返回的地址是堆中新对象的地址。
所以,第一句做+连接后返回String Pool中“hello”的地址,显然与变量hello的地址相等;
第二句返回的是堆中地址,显然与变量hello的地址不等;
分享到:
评论
2 楼 Tceisk9584 2008-12-09  
第一句执行后内存中有两个对象,而不是一个。一个由new String("abc")中的"abc"在String Pool里生成一个值为"abc"的对象;第二个由new在堆里产生一个值为"abc"的对象,该对象完全是String Pool里的"abc"的一个拷贝。变量s最后指向堆中产生的"abc"对象;


使用new String("abc")创建对象时,jvm是不会主动把该对象放到strings pool里面的.按你的说法System.out.println(s == s1);   应该就是true了
1 楼 aids198311 2008-03-30  
好!本来一直都有些模糊,现在豁然开朗!

相关推荐

    Java面试32问 面试常见问题

    从给定的文件信息中,我们可以提取出一系列与Java编程语言相关的面试问题...以上知识点涵盖了Java面试中常见的几个方面,理解这些概念对于Java程序员来说至关重要,不仅有助于通过面试,更能提升日常编码的质量和效率。

    面试常见问题-Java

    以下是 Java 面试中常见的问题和知识点: 一、基本数据类型和封装类 * Java 中有九种基本数据类型:boolean、byte、char、short、int、long、float、double 和 void * 每种基本数据类型都有对应的封装类:Boolean...

    java面试常见问题

    在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都...

    JAVA面试问题,自己和别人总结

    本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。 一、JAVA基础部分 * 抽象类和接口的区别 * 作用域public、private、protected的区别 * 重写和重载的区别 *...

    java面试题集锦 java面试题集锦

    以下是对标题和描述中涉及的一些常见Java面试题的详细解释: 1. **JDK 和 JRE 的区别** JDK(Java Development Kit)是用于开发和调试Java程序的完整工具集,包括JRE(Java Runtime Environment)、编译器(javac...

    BATjava面试含答案

    本文总结了 BAT 面试中常见的 Java 面试题,涵盖了 List、Map、String 等基本数据结构和面试题,旨在帮助读者更好地了解 BAT 面试的常见问题。 一、List 相关知识点 1. List 是有序的,ArrayList 和 LinkedList 是...

    Java面试宝典.pdf

    总之,《Java面试宝典》提供了丰富的面试题和解答,涵盖了从基础语法到高级特性的广泛内容,有助于求职者深入理解Java,并在面试中展现出扎实的技术功底。通过学习和实践这些知识点,不仅能够提升面试成功率,也能为...

    常见的java,android面试题整理

    Java和Android面试题涵盖了许多核心概念,以下是这些知识点的详细说明: 1. **面向对象** (Object-Oriented Analysis ...以上是Java和Android面试中常见的知识点,理解和掌握这些内容对于面试和实际开发都至关重要。

    Java面试中最经常被问到的问题

    在Java面试中,面试官经常会提出一系列问题来评估候选人的技术实力和对Java语言的理解程度。以下是两个常见的问题及其详细解答: 1. **Applet与Application的区别是什么?** - **Applet** 是一个至少包含一个继承...

    最全java面试题及答案(208道).pdf

    设计模式是Java中的一种技术,用于解决软件设计中的常见问题。Java中有多种设计模式,例如 Singleton、Factory等。 Spring/Spring MVC Spring是Java中的一种框架,用于开发Web应用程序。Spring MVC是Spring中的一...

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    java常见面试题(史上最全最经典-希望对你有用)

    Java常见面试题 Java是最流行的编程语言之一,掌握Java的基础知识是非常重要的。在这里,我们总结了Java常见的面试题,涵盖了Java的基础部分,包括基本语法、类相关的语法、内部类的语法、继承相关的语法、异常的...

    2022最新java面试题大全

    Java 是一种广泛使用的编程语言,本文总结了 Java 面试中常见的知识点,涵盖了 Java 基础、字符串操作、数据类型、运算符、抽象类等方面的知识。 Java 基础 1. JDK 和 JRE 的区别:JDK(Java Development Kit)...

    Java面试题以及答案整理.pdf

    为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...

    java面试问题集锦

    以上是Java面试中常见的一些知识点和问题解答。这些内容不仅涵盖了Java的基础知识,还包括了高级特性和编程实践。深入理解这些概念和技术可以帮助开发者更好地掌握Java语言,并提高面试的成功率。

    Java面试题,10万字208道Java经典面试题总结(附答案)

    以下是一些Java面试中常见的知识点: 1. JDK和JRE的区别: JDK(Java Development Kit)是Java开发工具包,它包含了编写、编译和调试Java应用程序所需的所有工具,包括JRE(Java Runtime Environment)。JRE则是...

    java面试经常要体什么问题

    - **面试常问的概念**:在Java面试中,面试官经常会提问一些基本概念,如多线程、装载机制、状态模式等。这些概念是评估应聘者基础知识掌握程度的重要指标。 - **多线程**:Java中的多线程是一种能够同时执行多个...

    2024java面试题.pdf

    以上就是针对2024年 Java 面试中可能出现的一些常见知识点的详细解读。这些知识点不仅覆盖了 Java 的基础知识,还包括了高级特性、设计模式、框架应用、并发编程、JVM 原理等多个方面。对于准备参加 Java 面试的人来...

Global site tag (gtag.js) - Google Analytics