老掉牙的问题:
1.String s1 = "abc";
2.String s2 = new String("abc");
3.String s3 = new String();
s3 = "abc";
以上三者顺序执行,分别创建了几个对象,哪些对象用==运算符,结果返回true?
下面我们来一个一个分析
字符串有别于其他的基本数据类型,它属于对象(引用)类型。在内存中会为其单开一个存储区--字符串常量池,用来存储这些字符串。
1.虚拟机JVM在读取到1的代码时,首先去字符串常量池查找,是否有“abc”,如果有则将该字符串的地址引用返回给栈中变量s1,如果没有,则会创建一个字符串对象“abc”,并将该对象的地址引用返回给s1.
单就本题来看,1中创建了一个对象
2.JVM在读取到2的代码时,会分两个步骤走,第一步类似1,如果有“abc”,则将该字符串常量的地址引用传递给堆中由new关键字新建的一块内存区(类似于将其拷贝一份,存放到新建堆中),然后将堆内存地址引用传递给栈中变量s2。如果没有“abc”,则会新建一个字符串对象“abc”,然后将新建字符串对象放进字符串常量池中,并将该对象地址引用传递给由new关键字新建的一块内存区。接着将堆内存地址引用传递给s2.
就本题而言,2中创建了1个对象
3.JVM在读取到3的代码时,会先通过new关键字,在堆内存中为新建的对象分配一个存储区,并将该存储区地址引用传递给栈中变量s3。然后会查看字符串常量池中是否存在字符串“abc”,如果存在,则将该字符串的地址引用传递给栈变量s3。如果不存在,则会在字符串常量池中创建该字符串对象“abc”,再而将该对象地址引用传递给s3.
本题中,3中创建了1个对象
s1==s2 --false
s1==s3 --true
s2==s3 --false
新手之言,如有错误和不妥之处,望各位多多指教,不甚感激~~~
O(∩_∩)O~
分享到:
相关推荐
尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...
【标题】"Java学习笔记4-圣诞树"主要聚焦于使用Java编程语言创建一个图形化的圣诞树展示。在Java编程中,这样的练习通常用于教授控制台输出艺术或基础的字符图形设计。它涉及到字符串操作、循环结构(如for或while)...
根据给定的文件标题、描述、标签以及部分内容,本文将深入解析其中提到的关键JAVA知识点,主要包括:对象状态、多态性、方法重写与重载的区别等。 ### 对象状态 在JAVA中,对象的状态主要指对象所具有的属性值及其...
在Java学习过程中,第二天的主题可能涉及了数据结构和集合框架中的一个重要概念——列表(List)的去重问题。这里我们主要探讨如何在Java中处理List的重复元素,以及可能涉及到的相关技术。 首先,让我们理解列表去重...
Java中的`final`关键字、抽象类和接口是面向对象编程中的核心概念,它们共同构建了类的层次结构和多态性。以下是对这些概念的详细解释: 1. **final关键字** - `final`关键字用于确保变量的值一旦被赋值后就不能...
6. **字符串处理**:String类在Java中扮演重要角色,提供了丰富的字符串操作方法,如concat、substring、indexOf、replace等。 7. **多线程**:Java内置了对多线程的支持,通过Thread类或实现Runnable接口可以创建...
### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...
### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...
### Java学习笔记-IO篇 #### 一、流的基本概念及分类 在Java中,**流**(Stream)是用于处理或传输数据的一种方式。它将数据视为一系列连续的字节序列或者字符序列进行处理。根据不同的标准,流可以分为多种类型:...
6. **main方法**:main方法是Java程序的入口点,用`public static void main(String[] args)`声明。每个Java应用程序都从main方法开始执行,它是程序执行的起点。参数数组args通常用来传递命令行参数。 这些基本...
Java是一种广泛使用的面向对象编程语言,其核心设计原则之一就是"万物皆对象"。面向对象编程(Object-Oriented Programming, OOP)是相对于面向过程编程的一种编程范式,它强调将数据和操作数据的函数封装在一起,...
这份“java学习笔记-达内科技”涵盖了从基础到高级的Java编程知识,旨在帮助初学者和进阶者深入理解Java的核心概念和技术。 首先,Java概述部分会介绍Java的历史、特点以及开发环境的搭建,包括安装JDK(Java ...
### Java学习笔记——基础知识详解 #### 一、Java开发环境(JDK)与运行环境(JRE) Java技术的核心在于其强大的跨平台能力,这主要得益于Java的两大环境:JDK(Java Development Kit)和JRE(Java Runtime ...
本学习笔记旨在重新巩固并深入理解Java的基础知识,帮助读者建立起扎实的编程基础。 ### 第一部分:Java的第一个应用 在Java的学习旅程中,编写第一个"Hello, World!"程序是必不可少的起点。以下是一个简单的示例...
JAVA学习笔记汇总与知识点解析 本篇JAVA学习笔记汇总涵盖了从数据库连接到HTML标记,再到JavaScript服务器端执行等多方面的内容。以下是对这些知识点的详细解析: ### 1. 使用JDBC:ODBC连接数据库 #### 知识点...
Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...
1.1. JAVA特点 1-4 1.2. 运行原理 1-4 1.3. JAVA目录 1-4 2. 一•基础知识 2-4 2.1. 配置环境 2-4 2.2. Java中基本概念 2-5 3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}...
Java小笔记——深入理解J2SE中的泛型与封装 在Java编程中,J2SE(Java Standard Edition)是核心部分,提供了丰富的API和功能。本文将重点讨论J2SE中的一个重要特性——泛型(Generics),以及封装的概念。泛型是...