专业编程基础技术教程

网站首页 > 基础教程 正文

String(Java)(stringjava关键字)

ccvgpt 2024-07-26 00:14:45 基础教程 6 ℃

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

创建字符串

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

String(Java)(stringjava关键字)

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));
    }
}

输出结果为:

S
t
r

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"));
    }
}

输出结果为:

true
false
true

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

Tags:

最近发表
标签列表