Apl中对String类的概述

一,String类的概述

1,String类在java.lang包下,所以使用的时候不需要导包

2,String类代表字符串,java程序中的所有字符文字(列如“abc”)都被实现此类的实列也就是说。java程序中所有的双引号字符串,都是String类的对象

3,字符串不可,它们的值在创建后不能被更改

二,String类的构造方法

具体运用如下代码;

package com.wedu.string;

public class Demo2StringConstructor {
    /*
        String类常见构造方法:

            public String() : 创建一个空白字符串对象,不含有任何内容
            public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
            public String(String original) : 根据传入的字符串内容,来创建字符串对象
            String s = “abc”;  直接赋值的方式创建字符串对象,内容就是abc

         注意:
                String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
                而是该对象所记录的真实内容.

                面向对象-继承, Object类
     */
    public static void main(String[] args) {
        // public String() : 创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println(s1);

        // public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
        char[] chs = {'a','b','c'};
        String s2 = new String(chs);
        System.out.println(s2);

        // public String(String original) : 根据传入的字符串内容,来创建字符串对象
        String s3 = new String("123");
        System.out.println(s3);
    }

三,创建字符串对象的区别

通过构造方法创建

通过new创建的字符串对象,每日一次New都会申请一个内存空间,虽然内容相同,,但地址不同

直接赋值方法创建

以“‘方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

而从上面两个创建方法中延申出对字符串的比较

所以,最后的内存结构如下:

  • == 比较基本数据类型:比较的是具体的值

  • == 比较引用数据类型:比较的是对象地址值

  • package com.wedu.stringmethod;

    public class Demo1Equals {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "ABC";
            String s3 = "abc";

            // equals : 比较字符串内容, 区分大小写
            System.out.println(s1.equals(s2));
            System.out.println(s1.equals(s3));

  •         // equalsIgnoreCase : 比较字符串内容, 忽略大小写
            System.out.println(s1.equalsIgnoreCase(s2));
        }
    }

         

    四,引用String 类型创建对象在内存中是如何分配内存?

  • 列如:画出如下几行代码的内存(堆栈)结构:

    String s1 = "hello";

    String s2 = "hello";

    String s3 = new String("hello");

    s1 += “world”;

  • 在Java中,String对象是存储在堆(Heap)上的,而引用变量(如s1,s2,s3)是存储在栈(Stack)上的。下面是这几行代码的内存结构:

  • String s1 = "hello";:在字符串常量池(String Constant Pool)中创建一个字符串对象,内容为"hello",然后在栈上创建一个变量s1,指向这个字符串对象。

  • String s2 = "hello";:不会再创建新的字符串对象,而是在栈上创建一个变量s2,指向已经存在的字符串对象"hello"。

  • 字符串常量池中有一个字符串对象"hello",被s2引用。

  • 堆上有两个字符串对象,一个是"hello",被s3引用,另一个是"helloworld",被s1引用。

  • 栈上有三个引用变量,s1指向"helloworld",s2和s3都指向"hello"。

  •  
    • String s3 = new String("hello");:在堆上创建一个新的字符串对象,内容为"hello",然后在栈上创建一个变量s3,指向这个新的字符串对象。

    • s1 += “world”;:在堆上创建一个新的字符串对象,内容为"helloworld",然后更新s1的引用,使其指向这个新的字符串对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值