以下内容是看了浪曦教学视频做的笔记!
问题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里的字符串对象的引用。
因此,以上程序执行的结果是
false,
true,
true。
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的地址不等;
分享到:
- 2008-03-30 17:57
- 浏览 2823
- 评论(2)
- 论坛回复 / 浏览 (2 / 4606)
- 查看更多
相关推荐
从给定的文件信息中,我们可以提取出一系列与Java编程语言相关的面试问题...以上知识点涵盖了Java面试中常见的几个方面,理解这些概念对于Java程序员来说至关重要,不仅有助于通过面试,更能提升日常编码的质量和效率。
以下是 Java 面试中常见的问题和知识点: 一、基本数据类型和封装类 * Java 中有九种基本数据类型:boolean、byte、char、short、int、long、float、double 和 void * 每种基本数据类型都有对应的封装类:Boolean...
在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都...
本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。 一、JAVA基础部分 * 抽象类和接口的区别 * 作用域public、private、protected的区别 * 重写和重载的区别 *...
以下是对标题和描述中涉及的一些常见Java面试题的详细解释: 1. **JDK 和 JRE 的区别** JDK(Java Development Kit)是用于开发和调试Java程序的完整工具集,包括JRE(Java Runtime Environment)、编译器(javac...
本文总结了 BAT 面试中常见的 Java 面试题,涵盖了 List、Map、String 等基本数据结构和面试题,旨在帮助读者更好地了解 BAT 面试的常见问题。 一、List 相关知识点 1. List 是有序的,ArrayList 和 LinkedList 是...
总之,《Java面试宝典》提供了丰富的面试题和解答,涵盖了从基础语法到高级特性的广泛内容,有助于求职者深入理解Java,并在面试中展现出扎实的技术功底。通过学习和实践这些知识点,不仅能够提升面试成功率,也能为...
Java和Android面试题涵盖了许多核心概念,以下是这些知识点的详细说明: 1. **面向对象** (Object-Oriented Analysis ...以上是Java和Android面试中常见的知识点,理解和掌握这些内容对于面试和实际开发都至关重要。
在Java面试中,面试官经常会提出一系列问题来评估候选人的技术实力和对Java语言的理解程度。以下是两个常见的问题及其详细解答: 1. **Applet与Application的区别是什么?** - **Applet** 是一个至少包含一个继承...
设计模式是Java中的一种技术,用于解决软件设计中的常见问题。Java中有多种设计模式,例如 Singleton、Factory等。 Spring/Spring MVC Spring是Java中的一种框架,用于开发Web应用程序。Spring MVC是Spring中的一...
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 是一种广泛使用的编程语言,本文总结了 Java 面试中常见的知识点,涵盖了 Java 基础、字符串操作、数据类型、运算符、抽象类等方面的知识。 Java 基础 1. JDK 和 JRE 的区别:JDK(Java Development Kit)...
为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...
以上是Java面试中常见的一些知识点和问题解答。这些内容不仅涵盖了Java的基础知识,还包括了高级特性和编程实践。深入理解这些概念和技术可以帮助开发者更好地掌握Java语言,并提高面试的成功率。
以下是一些Java面试中常见的知识点: 1. JDK和JRE的区别: JDK(Java Development Kit)是Java开发工具包,它包含了编写、编译和调试Java应用程序所需的所有工具,包括JRE(Java Runtime Environment)。JRE则是...
- **面试常问的概念**:在Java面试中,面试官经常会提问一些基本概念,如多线程、装载机制、状态模式等。这些概念是评估应聘者基础知识掌握程度的重要指标。 - **多线程**:Java中的多线程是一种能够同时执行多个...
以上就是针对2024年 Java 面试中可能出现的一些常见知识点的详细解读。这些知识点不仅覆盖了 Java 的基础知识,还包括了高级特性、设计模式、框架应用、并发编程、JVM 原理等多个方面。对于准备参加 Java 面试的人来...