Java入门之String 学习随记(一)

一. 前置知识

API-Application Programming Interface-应用程序编程接口,接口可以简单理解为别人写好的东西,我们拿过来直接使用即可.顾名思义,JavaAPI指的就是JDK提供的各种功能的Java类,它们将底层的实现封装了起来.

二. java.lang.String

该类为字符串,在Java中所有字符串文字都为此类的对象(该包为常用包,无需导包)

注:字符串的内容是不能被修改的,它的对象创建后就不能被修改了.

推:所以字符串的拼接也就是生成一个新的字符串,并非在原来的空间进行修改.

衍:字符串的拼接-"abc" + true = "abctrue"

                           "123" + "西门"="123西门"

                           "一匹黑马" + 666="一匹黑马666"

三. 创建字符串

1.直接赋值

String a = "hellothere";

2.new方法-空参构造-获取空白字符串

String b = "";

3. 有参构造,字符数组入参创建String对象

char[] chs = {'a', 'b', 'c'};

String s = new String(chs);

4. 有参构造,字节数组入参创建String对象

byte[] bytes = {97,98,99,100};

String b = new String(bytes);

四. String的底层原理

String池,在JDK1.7之后是一个独立存在的空间(不在堆内存中),当我们创建一个String对象的时候,会在该空间中划出一部分给该对象,并将地址给与对应的标识符.如果再创建相同对象的时候,可以使用池中已有的.

注意,与之相对应的就是new方法创建的字符串,通过这种方式创建出来的字符串,会在堆内存中单独创建出来一块空间,即便是重复的对象也会重复划分出空间使用,所以衍生出两个问题:1.浪费空间.2.字符串值相同但地址不同(比较的时候?)

五.字符串的比较

提问: == 该符号比较的是什么?

回答: 数值.

评论:错误.

解释:分情况而言,引用数据类型和基本数据类型有不同,基本数据类型比较的就是数值,因为他们都在栈内存中,直接比较值即可;引用数据类型在堆内存中,标识符存储的都是地址值,那么使用==进行比较,就是在比较地址值.

衍生: 字符串的创建方式不同,比较情形则不同-如果是"直接赋值"的方式,字符串都在"池"中,同值比较的时候,地址值也相同,自然相等,反之亦然;而用new方法创建的字符串,因为是在堆内存中不断划分的空间,同值比较的时候,地址值依然不同,结果和实际情况不符合.

方法: boolean equals

Java入门之String 学习随记(一)_第1张图片

你可能感兴趣的:(Java基础,java)