Java编程基础

发表时间: 2022-11-17 17:33

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

创建字符串

可以使用最简单的方式创建字符串,创建方式如下:

String str = "string";

可以使用构造函数来创建,创建方式如下:

String str = new String("string");

不同的创建当时性质不一样,这里在下面做一下列举:

public class StringTest {    public static void main(String[] args) {        String str1 = "string";        String str2 = "string";        System.out.println(str1 == str2);//true    }}

为什么运行结果是true呢,这是因为String创建的字符串会在字符串常量池中,相同的字符串会指向同一块区域,所以是true,无论再多的创建都是指向同一片内存区域,示例如下:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = "string";        String str2 = "string";        String str3 = "string";        String str4 = "string";        String str5 = "string";        String str6= "string";        System.out.println(str1 == str2);//true        System.out.println(str1 == str2);//true        System.out.println(str1 == str3);//true        System.out.println(str1 == str4);//true        System.out.println(str1 == str5);//true        System.out.println(str1 == str6);//true    }}

但是通过构造函数创建的方式,创建出来的对象是存放在堆中的,都是每一个对象分配内存区域的,示例如下:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String");        String str2 = new String("String");        System.out.println(str1 == str2);//true    }}

无论创建多少内容相同的字符串都是会另外开辟内存空间的,示例如下:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String");        String str2 = new String("String");        String str3 = new String("String");        String str4 = new String("String");        String str5 = new String("String");        String str6 = new String("String");        System.out.println(str1 == str2);//true        System.out.println(str1 == str2);//true        System.out.println(str1 == str3);//true        System.out.println(str1 == str4);//true        System.out.println(str1 == str5);//true        System.out.println(str1 == str6);//true    }}

示意图如下:

构造函数

String中有很多的构造函数,用于不同参数初始化我们的字符串:

以字符数组为例,示例如下:

public class StringDemo{   public static void main(String args[]){      char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};      String helloString = new String(helloArray);        System.out.println( helloString );   }}

字符串长度

用于获取有关对象的信息的方法称为访问器方法。

String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。

下面的代码执行后,len 变量等于 6:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String");        System.out.println(str1.length());    }}

连接字符串

String中有两种方式可以链接字符串,第一种是使用concat来连接字符串,示例如下:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        String str2 = new String("String2");        System.out.println(str1.concat(str2));    }}

输出结果为:

String1String2

concat方法源码:

public String concat(String str) {    if (str.isEmpty()) {        return this;    }    return StringConcatHelper.simpleConcat(this, str);}

它的返回值是String类型,返回的是链接后的字符串。

第二种方式是重载的操作符+,示例如下:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        String str2 = new String("String2");        System.out.println(str1+str2);    }}

输出结果为:

String1String2

它的原理在这里就不做详细讲解了,以后在进阶学习的时候再做讲解。

String的相关方法

这里的相关参数和返回值就不做过多阐述了,详细的可以去阅读jdk提供的api操作文档

charAt(int index):返回指定索引位置的字符,index为索引值

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        System.out.println(str1.charAt(0));        System.out.println(str1.charAt(1));        System.out.println(str1.charAt(2));    }}

输出结果为:

Str

int hashCode():返回该字符串的哈希值

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        System.out.println(str1.hashCode());    }}

输出结果为:

-217105888

int length():返回字符串的长度:

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        System.out.println(str1.length());    }}

输出结果为:

7

boolean contains(String str):是否包含当前字符串

package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest {    public static void main(String[] args) {        String str1 = new String("String1");        System.out.println(str1.contains("1"));        System.out.println(str1.contains("s"));        System.out.println(str1.contains("S"));    }}

输出结果为:

truefalsetrue

等等等等一系列操作字符串的方法,这里就不做过多的赘述了。