Java-String类

String类的理解和创建对象

1)String对象用于保存字符串,也就是一组字符序列;

2)字符串常量对象使用双引号括起的字符串序列;例如:"你好"、"12.97"、"boy"等;

3)字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节;

4)String类较常用的构造方法:

String s1 = new String();

String s2 = new String(String original);

String s3 = new String(char[] a);

String s4 = new String(char[] a,int startIndex,int count);

★String 实现了Serializable接口,String可以串行化可以在网络传输

★String 实现了Comparable,String对象可以进行比较

package com.pero.string_;

/**
 * @author Pero
 * @version 1.0
 */
public class String01 {
    public static void main(String[] args) {
        //1)String对象用于保存字符串,也就是一组字符序列;
        //2)字符串常量对象使用双引号括起的字符串序列;例如:"jake"
        //3)字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节;
        //4)String类较常用的构造方法:
        //   String s1 = new String();
        //   String s2 = new String(String original);
        //   String s3 = new String(char[] a
        //   String s4 = new String(char[] a,int startIndex,int count);
        //5)String 实现了Serializable接口,String可以串行化可以在网络传输
        //6)String 实现了Comparable,String对象可以进行比较
        //7)String是一个final类不能被继承
        //8)String类中有个属性private final char value[];用于存放字符串内容
        //8)value是一个final类型的,一旦复制不能改变(不能修改地址,可以修改字符)
        String name = "jake";
        name = "tom";
        
        final char[] value = {'a','b','c'};
        char[] v2 = {'t','o','m'};
        value[0] = 'h';
        //value = v2;Cannot assign a value to final variable 'value',不可以修改value地址
    }
}

创建String对象的两种方式

1)方式一:直接赋值  String s1 = "pero";

先从常量池里查看是否有"pero"数据空间,如果有,直接指向;如果没有则重新创建,然后指向;s1最终指向的是常量池的空间地址。

2)方式二:调用构造器 String s2 = new String("pero");

先在堆中创建空间,里面维护了value属性,指向常量池的"pero"空间,如果常量池没有"pero",重新创建;如果有,直接通过value指向。最终指向的是堆中空间地址。

package com.pero.string_;

/**
 * @author Pero
 * @version 1.0
 */
public class String02 {
    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        System.out.println(a.equals(b));//true
        System.out.println(a==b);//true
    }
}
package com.pero.string_;

/**
 * @author Pero
 * @version 1.0
 */
public class String03 {
    public static void main(String[] args) {
        String a = "pero";  //指向常量池
        String b = new String("pero");  //指向堆空间
        System.out.println(a.equals(b));  //true
        System.out.println(a==b);       //false
        System.out.println(a==b.intern());  //true
        System.out.println(b==b.intern());  //false
        //当调用intern()方法时,如果常量池已经包含一个等于此String对象的字符串(
        // equals(Object)方法确定)则返回池中的字符串;否则,将此String对象添加到池中
        // 返回此String对象的引用
        //b.intern()方法最终返回的是常量池中的地址(对象);
    }
}

字符串的特性

1)String是一个final类,代表不可变的字符序列

2)字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的。

String s1 = "hello";

s1 = "haha";

//创建了两个对象,将常量池中的"haha"空间地址指向s1

3)String s = "hello" + "haha";

底层,判断创建的常量池对象,是否有引用指向,优化等价于String s = "hellohaha";

4)String a = "hello";

      String b = "haha";

      String s = a + b;

package com.pero.string_;

/**
 * @author Pero
 * @version 1.0
 */
public class String04 {
    public static void main(String[] args) {
        String a = "hello";
        String b = "haha";
        
        //1.创建一个StringBuilder sb = new StringBuilder();
        //2.执行sb.append("hello");
        //3.sb.append("abc");
        //4.String c = sb.toString();
        //最后其实是c指向堆中的String类对象value[] -> 池中"helloabc"
        String s = a + b;
        String d = "helloabc";
        System.out.println(c==d);  //false
    }
}

底层是: StringBuilder sb = new StringBuilder(); sb.append(a);sb.append(b);sb是在堆中,并且append是在原来字符串的基础上追加的。

String c1 = "ab" +"cd";常量相加,是在池中;

String c2 = a+b;变量相加,是在堆中;

package com.pero.string_;

/**
 * @author Pero
 * @version 1.0
 */
public class String05 {
    public static void main(String[] args) {
        Test01 test01 = new Test01();
        test01.change(test01.str,test01.ch);
        System.out.print(test01.str+"and");
        System.out.println(test01.ch);
    }
}
class Test01{
    String str = new String("pero");
    final char[] ch = {'j','a','v','a'};
    public void change(String str,char[] ch){
        str = "java";
        ch[0] = 'h';
    }
}

String类的常见方法

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String的功能,并提高效率。

package com.pero.string_;

import java.util.Locale;

/**
 * String常用方法
 *
 * @author Pero
 * @version 1.0
 */
public class String06 {
    public static void main(String[] args) {
        //1.equals()方法,区分大小写对对象的内容进行判断是否相同
        String str1 = "hello";
        String str2 = "Hello";
        System.out.println(str1.equals(str2));

        //2.equalsIgnoreCase()方法,忽略大小写的判断内容是否相等
        String username = "johN";
        if ("john".equalsIgnoreCase(username)) {
            System.out.println("Success");
        } else {
            System.out.println("Failure");
        }

        //3.length()方法,获取字符的个数,字符串的长度
        System.out.println("pero".length());

        //4.indexOf()方法,获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到返回-1
        String s1 = "we@terewe@g";
        int index = s1.indexOf("@");
        System.out.println(index);
        System.out.println(s1.indexOf("we"));

        //5.lastIndexOf()方法,获取字符在字符串对象中最后一次出现的索引,索引从0开始,如果找不到则返回-1
        String s2 = "we@terew@g";
        int index01 = s2.lastIndexOf("@");
        System.out.println(index01);
        System.out.println(s2.lastIndexOf("ter"));

        //6.subString()方法,截取指定范围的子串
        String name = "hello,pero";
        //从索引6开始截取后面的所有内容
        System.out.println(name.substring(6));
        //从索引2开始截取,截取到索引5-1=4的位置
        System.out.println(name.substring(2, 5));

        //7.toUpperCase()方法,将字符串转换成大写
        String s = "hello";
        System.out.println(s.toUpperCase());

        //8.toLowerCase()方法,将字符串转换成小写
        System.out.println(s.toLowerCase());

        //9.concat()方法,拼接字符串
        String s3 = "jake";
        s3 = s3.concat("lucy").concat("smith").concat("together");
        System.out.println(s3);

        //10.replace()方法,替换字符串中的字符
        String s4 = "my name is jake";
        s4 = s4.replace("jake", "smith");
        System.out.println(s4);

        //11.split()方法,分割字符串,对于某些分割字符我们需要转义"\",比如“|和\\”等;
        String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        String[] split = poem.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }

        String poem01 = "E:\\aaa\\bbb";
        String[] split01 = poem01.split("\\\\");
        for (int i = 0; i < split01.length; i++) {
            System.out.println(split01[i]);
        }


        //12.toCharArray()方法,将字符串转换成字符数组
        String s6 = "happy";
        char[] chars = s6.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }

        //13.compareTo()方法,比较两个字符串大小,如果前者大,则返回正数;
        // 如果后者大,则返回负数;如果相等,则返回0;
        String a = "john";
        String b = "jake";
        System.out.println(a.compareTo(b));  //返回值是'o'-'a' = 14 的值
        String c = "joh";
        System.out.println(a.compareTo(c));  //返回值是1,前面的字符串长度减去后面的字符串长度

        //14.format()方法,格式字符串
        //1.%s、%d、%.2f、%c 称为占位符
        //2.这些占位符后面有对应的变量来替换
        //3.%s 表示由字符串来替换
        //4.%d 表示由整数来替换
        //5.%.2f 表示由小数来替换,并且保留两位小数,并且进行四舍五入进行处理
        //6.%c 表示由字符来替换
        String studentName = "john";
        int age = 18;
        double score = 98.3 / 3;
        char gender = '男';
        String info = "我的名字是:" + studentName + "年龄是:" + age +
                "成绩是:" + score + "性别是:" + gender;
        System.out.println(info);

        String info01 = String.format("我的名字是:%s年龄是:%d成绩是:%.2f性别是:%c", studentName, age, score, gender);
        System.out.println(info01);

        String formatStr = "我的名字是:%s年龄是:%d成绩是:%.2f性别是:%c";
        String info02 = String.format(formatStr,studentName,age,score,gender);
        System.out.println(info02);
    }
}

Java中的String是一个非常重要的,它代表了字符串型的数据。以下是关于JavaString的一些介绍和操作方法: 1. StringJava中的一个,用于表示字符串型的数据。 2. String的对象是不可变的,也就是说,一旦创建了一个String对象,就不能再修改它的值。 3. 可以使用双引号来创建一个String对象,例如:String str = "Hello World"。 4. String中有很多方法可以用来操作字符串,例如获取字符串长度、比较字符串、查找子字符串等等。 5. 获取字符串长度的方法是:str.length(),其中str是一个String对象。 6. 比较两个字符串是否相等的方法是:str1.equals(str2),其中str1和str2都是String对象。 7. 查找子字符串的方法是:str.indexOf(subStr),其中str是一个String对象,subStr是要查找的子字符串。 以下是一个Java程序示例,演示了如何使用String的一些方法: ```java public class StringDemo { public static void main(String[] args) { String str1 = "Hello"; String str2 = "World"; String str3 = "Hello"; // 获取字符串长度 System.out.println("Length of str1: " + str1.length()); // 比较字符串是否相等 System.out.println("str1 equals str2? " + str1.equals(str2)); System.out.println("str1 equals str3? " + str1.equals(str3)); // 查找子字符串 System.out.println("Index of 'llo' in str1: " + str1.indexOf("llo")); } } ``` 输出结果为: ``` Length of str1: 5 str1 equals str2? false str1 equals str3? true Index of 'llo' in str1: 2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值