<commit_before>#### String(immutable)类详解

String类是我们开发中最常用的类之一，其提供了诸多字符串操作方法，java中所有的字符串字面值(String literal)，如“abc”等，都是当作String类来处理的。 这里需要强调，String类的对象是个**常量(Constant)**，一旦创建不可更改，如果需要可变的字符串类，需要使用StringBuffer和StringBuilder，后面会介绍。

##### 	1 String类的继承

String继承了java的根类-Object类，因此Object中的非private方法都被继承了下来，有一些进行了重写，其中就包括Object类中的equals方法

![](http://ofmzs1ffp.bkt.clouddn.com/20171103150970391681050.jpg?imageView2/0/format/jpg)



##### 	2 ==和equals问题

由于String类有个字符串常量池(String pool)的概念，加上特别支持了+操作，导致了在相等性比较上容易出现混淆的情况。下面针对==和equals做一个具体的解释。

###### 	2.1 ==

其实java中的比较，一般都是比较字面值，即比较对象本身的值，对于int, long,double等基本数据类型而言，变量本身存储的就是变量含义的值，如```int a = 3;```,a的值就是3，但是对于String这类引用类型变量而言，```String str = "abc"``` str中存储的是字符串"abc"的引用。这里我们需要理解一下几个概念：

1. 只要通过new的方式初始化String类，就一定产生新的对象，即新的引用值
<commit_msg>modify string详解<commit_after>---
layout:     post
title:      String类详解
subtitle:   继承&equals重写&String literal&StringBuffer原理
date:       2017-11-1
author:     CoderFrank	
header-img: img/post-bg-unix-linux.jpg
catalog: true
tags:
    - Java
---



#### String(immutable)类详解

String类是我们开发中最常用的类之一，其提供了诸多字符串操作方法，java中所有的字符串字面值(String literal)，如“abc”等，都是当作String类来处理的。 这里需要强调，String类的对象是个**常量(Constant)**，一旦创建不可更改，如果需要可变的字符串类，需要使用StringBuffer和StringBuilder，后面会介绍。

##### 	1 String类的继承

String继承了java的根类-Object类，因此Object中的非private方法都被继承了下来，有一些进行了重写，其中就包括Object类中的equals方法

![](http://ofmzs1ffp.bkt.clouddn.com/20171103150970391681050.jpg?imageView2/0/format/jpg)



##### 	2 ==和equals问题

由于String类有个字符串常量池(String pool)的概念，加上特别支持了+操作，导致了在相等性比较上容易出现混淆的情况。下面针对==和equals做一个具体的解释。

###### 	2.1 ==

其实java中的比较，一般都是比较字面值，即比较对象本身的值，对于int, long,double等基本数据类型而言，变量本身存储的就是变量含义的值，如```int a = 3;```,a的值就是3，但是对于String这类引用类型变量而言，```String str = "abc"``` str中存储的是字符串"abc"的引用。这里我们需要理解一下几个概念：

1. 只要通过new的方式初始化String类，就一定产生新的对象，即新的引用值

{'fraction_non_alphanumeric': 0.14174972314507198, 'fraction_numerical': 0.040420819490586936, 'mean_word_length': 9.151685393258427, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '910849', 'n_tokens_mistral': 1160, 'n_tokens_neox': 1213, 'n_words': 64}