之前很多面试题问到关于"abc" 与 new String("abc")的区别,看到很多网上的解释,这里写下自己的理解.
据说有一个地方存放着Java的常量字符串,我们叫它常量池,此常量池是有String类privately 维护的,也就是默默的维护.
另外对于String类有一个方法叫intern(),当一个String实例调用intern()方法时:
首先通过equals()方法判断常量池中是否已经包含这个string 实例,如果包含那么intern()方法就返回这个字符串,如果常量池不包含这个string常量,那么这个string实例就被加到常量池,而且intern()方法返回一个对这个String实例的引用.
对于两个字符串常量s,t 当且仅当s.equals(t)时,s.intern()==t.intern();
还有Java中所有的String常量以及常量表达式都是已经被存放在常量池中的.
所以 “abc” 与 new String("abc") 的区别就是他们存放的地址是不一样的,但是两个不同的地址存放的值是一样的。
也就是说 “abc” == new String("abc") 是false,但是“abc”.equals(new String("abc")) 是ture。
说到这里要说的 == 与 equals的区别 ==比较的是存放两个字符串的地址是否为同一地址,而String 的equals方法被重写以后 是比较两个字符串的值。
另外关于String的相关东西可以参考参考:
http://blog.csdn.net/fover717/article/details/5764207?reload
相关推荐
尚硅谷康师傅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学习笔记-达内科技”涵盖了从基础到高级的Java编程知识,旨在帮助初学者和进阶者深入理解Java的核心概念和技术。 首先,Java概述部分会介绍Java的历史、特点以及开发环境的搭建,包括安装JDK(Java ...
### Java学习笔记-IO篇 #### 一、流的基本概念及分类 在Java中,**流**(Stream)是用于处理或传输数据的一种方式。它将数据视为一系列连续的字节序列或者字符序列进行处理。根据不同的标准,流可以分为多种类型:...
### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...
### Java学习笔记——基础知识详解 #### 一、Java开发环境(JDK)与运行环境(JRE) Java技术的核心在于其强大的跨平台能力,这主要得益于Java的两大环境:JDK(Java Development Kit)和JRE(Java Runtime ...
本学习笔记旨在重新巩固并深入理解Java的基础知识,帮助读者建立起扎实的编程基础。 ### 第一部分:Java的第一个应用 在Java的学习旅程中,编写第一个"Hello, World!"程序是必不可少的起点。以下是一个简单的示例...
Java是一种广泛使用的面向对象的编程语言,以其平台独立性、高效性和丰富的库而著名。本篇笔记将深入探讨Java的基础知识,旨在帮助初学者更好地理解并掌握这门强大的语言...希望这些笔记能为你的Java学习之路提供帮助。
在Java学习过程中,第二天的主题可能涉及了数据结构和集合框架中的一个重要概念——列表(List)的去重问题。这里我们主要探讨如何在Java中处理List的重复元素,以及可能涉及到的相关技术。 首先,让我们理解列表去重...
1. **final修饰类**:当一个类被声明为final时,它不能被其他类继承,这意味着该类是不可扩展的,如`java.lang.String`就是一个final类。 2. **final修饰方法**:如果一个方法被声明为final,那么它不能在子类中被...
这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...
{1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...
Java反射机制是Java编程语言中的一个强大特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至能够动态调用方法和创建对象。在深入理解Java反射机制之前,我们先要明白类加载的过程。当Java程序...
6. **字符串处理**:String类在Java中扮演重要角色,提供了丰富的字符串操作方法,如concat、substring、indexOf、replace等。 7. **多线程**:Java内置了对多线程的支持,通过Thread类或实现Runnable接口可以创建...
6. **main方法**:main方法是Java程序的入口点,用`public static void main(String[] args)`声明。每个Java应用程序都从main方法开始执行,它是程序执行的起点。参数数组args通常用来传递命令行参数。 这些基本...
### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...
Java是一种广泛使用的面向对象编程语言,其核心设计原则之一就是"万物皆对象"。面向对象编程(Object-Oriented Programming, OOP)是相对于面向过程编程的一种编程范式,它强调将数据和操作数据的函数封装在一起,...
Java小笔记——深入理解J2SE中的泛型与封装 在Java编程中,J2SE(Java Standard Edition)是核心部分,提供了丰富的API和功能。本文将重点讨论J2SE中的一个重要特性——泛型(Generics),以及封装的概念。泛型是...
public static void main(String[] args) { Father child = new Child(); child.func1(); // 输出什么? } } ``` 在这个例子中: - `Father` 类有一个 `func1()` 方法,该方法内部调用了 `func2()`。 - `Child`...
Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...