【Java】String类型

179 阅读4分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

目录

今天阿文介绍的内容:

  • Java中的String类
  • String类的各种函数

Java String类

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String表示字符串类型,属于引用数据类型,不属于基本数据类型。

1.创建字符串

创建字符串最简单的方式如下:

语法格式:

String str = "zhangsan";

在代码中遇到字符串常量时,这里的值是 "zhangsan",编译器会使用该值创建一个 String 对象。和其它对象一样,可以使用关键字new构造方法来创建 String 对象。

构造方法创建:

String str2 = new String("zhangsan");

在JDK当中String类型的字符串,例如"abc","dfs"都是直接存储在“方法区”的“字符串常量池”当中的。

这是因为字符串在实际开发中使用太频繁。为了执行效率,所以把字符串放到了方法区字符串常量池当中。

例子1:

public class StringTest01 {
    public static void main(String[] args) {
        // 这两行代码表示底层在字符串常量池中创建了3个字符串对象,分别为:abcdef、xy、abcdefxy
        String s1 = "abcdef";
        String s2 = "abcdef" + "xy";

        // 分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪里来的?
        // 凡是双引号括起来的都在字符串常量池中有一份。
        // new对象的时候一定在堆内存当中开辟空间。
        String s3 = new String("xy");
    }
}

底层分布图:

JavaString1.png

例子2:

public class StringTest02 {
    public static void main(String[] args) {
        String s1 = "hello";
        // "hello"是存储在方法区的字符串常量池当中
        // 所以这个"hello"不会新建。(因为这个对象已经存在了!)
        String s2 = "hello";
        
        // == 双等号比较的是变量中保存的内存地址
        System.out.println(s1 == s2); // true

        String x = new String("xyz");
        String y = new String("xyz");
        
        // == 双等号比较的是变量中保存的内存地址
        System.out.println(x == y); //false
    }
}

底层分布图:

JavaString2.png

注意: 字符串对象之间的比较不能使用“== ”,"=="不保险。应该调用String类的equals方法

例子3:

String k = new String("testString");
//String k = null;
// "testString"这个字符串可以使用"."引用字符串方法呢?
// 因为"testString"是一个String字符串对象。只要是对象都能调用方法。
System.out.println("testString".equals(k)); // 建议使用这种方式,因为这个可以避免空指针异常。
System.out.println(k.equals("testString")); // 存在空指针异常的风险。不建议这样写。

2.构造方法

构造方法名例子
String s = "xyz"最常用
String(String original)String("xyz")
String(char数组)String(charArray)
String(char数组, 起始下标, 长度)String(charArray, m, n)
String(byte数组)String(byteArray)
String(byte数组,起始下标,长度)String(byteArray, n, m)
String(StringBuffer buffer)String(buffer)
String(StringBuilder builder)String(builder)

例子:

class StringTest{
    public static void main(String[] args) {
    	//最常用的方式
        String s1 = "我叫张三";
        System.out.println(s1);//我叫张三

        String s2 = new String("我叫张三");
        System.out.println(s2);//我叫张三

        char[] c = {'我' , '叫', '张', '三'};
        String s3 = new String(c);
        System.out.println(s3);//我叫张三

        String s4 = new String(c, 2, 2);
        System.out.println(s4);//张三

        byte[] b = {65, 66 ,67, 68};
        String s5 = new String(b);
        System.out.println(s5);//ABCD

        String s6 = new String(b, 1, 2);
        System.out.println(s6);//BC

        StringBuffer sb1 = new StringBuffer("我是广东人");
        String s7 = new String(sb1);
        System.out.println(s7);//我是广东人

        StringBuilder sb2 = new StringBuilder("我是广州人");
        String s8 = new String(sb2);
        System.out.println(s8);//我是广州人
    }
}

可以看到,将字符数组作为构造函数的参数时,Java换将字符数组中的字符相连,然后赋值给字符串,byte类型数组则是将byte类型的值对应ASCII转换为字符,然后相连。StringBuilderStringBuffer是可变字符串。

3.字符串长度

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

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

例子:

class StringTest{
    public static void main(String args[]) {
        String site = "www.baidu.com";
        int len = site.length();
        System.out.println( "百度网址长度 : " + len );//len = 13
   }
}

4.连接字符串

String 类提供了连接两个字符串的方法:

string1.concat(string2);

返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:

"我叫".concat("张三");

更常用的是使用'+'操作符来连接字符串,如:

string1 + string2;
"我叫" + "张三";

例子:

public class StringTest {
    public static void main(String args[]) {     
        String string1 = "百度网址:";     
        System.out.println("1、" + string1 + "www.baidu.com");
        //输出:1、百度网站:www.baidu.com  
    }
}

5.创建格式化字符串

在Java中,String类提供了一个静态方法format(),String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。String 类的静态方法 format() 能用来创建可复用的格式化字符串。

例子:

String fs;
fs = String.format("浮点型变量的值为" +
    "%f, 整型变量的值为 " +
    " %d, 字符串变量的值为 " +
    " %s", floatVar, intVar, stringVar);

总结

  • String类型是引用类型,字符串常量存放在字符串常量池
  • String类型提供了大量的构造函数
  • String类型可以使用concat()和“+”对字符串进行连接
  • String类型通过format()进行字符串格式化

好了,今天阿文就介绍到这了...

byebye...