zoukankan      html  css  js  c++  java
  • String类、StringBuffer类StringBulider类(对象和对象的引用、三个类的区别)

    1、String类

    (1)String类的特点一(字符串一旦确立就不能更改,字符串是一个常量。)

    也就是说String类对象不可变,对象的引用可以改变。
    不可变的对象:
        public static void main(String[] args) {
            String str="123";
            str="234";
            System.out.println(str);
        }

    输出的结果为234。

     上面在对str改变值的过程中体现的便是对象的引用的改变。

    (2)String的特点二:String不属于八大基本数据类型,它属于引用数据类型。
        String str="123";
        String str1=new String("234");

    以第二种方式跟类创建对象的方式是一样的。

    (3) String类的方法:

    import java.util.Scanner;
    
    public class StringDemo {
        public static void main(String[] args) {
            System.out.println("请输入第一个字符串:");
            Scanner sc1 = new Scanner(System.in);
            String str1 = sc1.nextLine();// 在内存中只有一个对象。这个对象在字符串常量池中
            System.out.println("请输入第二个字符串:");
            Scanner sc2 = new Scanner(System.in);
            String str2 = new String(sc2.nextLine());// 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
            System.out.println("两个字符串地址是否相等:" + (str1 == str2));// (1)
            System.out.println("两个字符串元素是否相等:" + str1.equals(str2));// (2)
            System.out.println("两个字符串元素是否相等:" + str1.equalsIgnoreCase(str2));// (2)
            System.out.println("字符串一的长度为:" + str1.length());// (3)
            System.out.println("字符串一为:" + str1.toString());
            System.out.println("字符串二为:" + str2.toString());
            System.out.println("字符串一从地址2开始取字符串:" + str1.substring(2));// (4)
            System.out.println("字符串一从地址2到5取字符串:" + str1.substring(2, 5));// (5)
            System.out.println("字符串一是否以指定前缀1开始:" + str1.startsWith("1"));// (6)
            System.out.println("字符串二是否以指定后缀9结束:" + str2.endsWith("9"));// (7)
            System.out.println("字符串一是否包含字符串123:" + str1.contains("123"));// (8)
            System.out.println("字符串123在str1中第一次出现的索引:" + str1.indexOf(str1));// (9)
            char[] chs = str1.toCharArray();// (10)转换为字符数组
            String s0 = new String(chs);
            System.out.println(s0);
            System.out.println("字符数组的第一个字符为:" + chs[0]);
            byte[] bytes = str1.getBytes();// (11)转换为字节数组
            String s = new String(bytes);
            System.out.println(s);
            System.out.println(bytes[0]);
            System.out.println("字符串二转换为大写字母为:" + str2.toUpperCase());// (12)
            System.out.print("charAt的运用:");
            for (int i = 0; i < str1.length(); i++) {
                char ch = str1.charAt(i); // 获取指定位置上的字符
                System.out.print(ch);
            }
        }
    }

     (4)对象与对象的引用:

    java中经常说的一句话是“万物皆对象”,那么究竟什么是对象呢?

    对象是类的一个实例,比如说人类是一个类,那么具体到一个人的话这个人就是一个对象,该对象有具体的年龄、性别、姓名等属性。

    什么又是对象的引用呢?

      Person person;
      person=new Person("zhai",12);
      person=new Person("zhang",23);

    可以看到后两行代码分别创建了两个对象,那么person就是对象的引用,对象的引用可以指向Person类型的任何一个对象。

    2、StringBuffer类

    StringBuffer类:与String类不同,StringBuffer类在创建对象之后可以用不同的方法对该对象进行多种方式的修改。

    public class StringBufferDemo {
        public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("1234"); //添加字符串
        sb.insert(2, "dont");//在指定位置插入,
        sb.delete(1, 4);//删除,包含头,不包含尾
        sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾
        String str = sb.toString();
        System.out.println(str);
        System.out.println(sb.reverse());//反转
        System.out.println("字符串的长度为:"+sb.length());
    }
    }

     3、StringBulider类

    StringBulider类创建的字符串同样可以对字符串进行修改:

    public class StringBuliderDemo {
        public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("1234"); //添加字符串
        sb.insert(2, "dont");//在指定位置插入,
        sb.delete(1, 4);//删除,包含头,不包含尾
        sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾
        String str = sb.toString();
        System.out.println(str);
        System.out.println(sb.reverse());//反转
        System.out.println("字符串的长度为:"+sb.length());
    }
    }

    4、 String类、StringBuffer类、StringBulider类的区别

    (1)线程安全性:

    线程安全:String、StringBuffer

    线程不安全:StringBulider

    (2)执行效率

    StringBulider最快,Stringbuffer次之,String最差

    (3)存储空间

    String的对象一旦创建就不能改变,是一个常量,对String操作后会生成新的String,效率低且浪费空间。

    StringBuffer和StringBulider的对象都是可以改变的,节省了空间,效率较高。不能使用String"+"来拼接,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。

    (4)使用场景

    少量数据:String

    大量数据、多线程:StringBuffer

    大量数据、单线程:StringBulide

    总结:

    String、StringBuffer、StringBulider的区别:https://www.cnblogs.com/zhai1997/p/12423092.html

  • 相关阅读:
    Commando War (贪心)
    Codehorses T-shirts (map+遍历)
    HDU
    HDU—2021-发工资咯(水题,有点贪心的思想)
    HDU
    CSDN自定义栏目代码
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/zhai1997/p/11348759.html
Copyright © 2011-2022 走看看