Sring类
在C语言当中并没为字符创建一个类型,而java提供了一个String类用来实现定义字符串类型,分别是String、
StringBuffer、StringBuider类,并且StringBuffer StringBuider两者用法非常相似。我分享我对String学到的知识
String的创建
String我们常用的有三种形式来创建对象
第一种使用字符串字面量:这种方式使用了字符串字面量。在Java中,字符串字面量被放入字符串常量池。如果你创建了两个包含相同字符序列的字符串字面量,它们会引用常量池中的同一个对象。
第二种是使用了new关键字与字符串字面量:这种方法每次使用new 关键字创建时,都会在堆区创建一个新的字符串对象,即使在常量池中已经存在了一个相同的。
第三种是使用了new关键字和数组:这种方法首先在堆区创建一个字符串对象,在通过字符数组来初始化这个字符串对象。
String的类型
String它不属于基本类型的其中一种,而是属于引用类型的一种,这说明它所存储内容不是值,而是一个地址,所指向的内容才是我们所需要的值。
首先我们来到String类的源码当中
它定义了一个 引用类型char[]的 value(用来存储数据) 和一个 int类的 hash
(在JDK8中用final char[]存储字符串数据,JDK9后改为final char[] 来存储数据)
所以我们可以画图知道
通过指向我们可以找到我们所需要的内容
String的比较
由于字符串是引用数据类型,不能通过直接“==”来判断他们是否向相等,而是通过.equal()的方法判断他们是否相等。
String 的方法
1、字符串查找
2、转化
1、大小写的转化
2、字符串转数组
等等等还有很多很多其他的方法就不一一列出来了。
String的不可改变性
首先在String创建的过程中就被定义为final
同时
1、value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中
的内容可以修改。
2、final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。
3、对字符串进行操作,如拼接、替换或者截取等,通常都会产生新的字符串对象,而原始的字符串对象不会被改变。