String类详解笔记----拓展

目录

  1. String类对象实例化
  2. 字符串比较
  3. 字符串常量
  4. 两种实例化方式比较(共享设计模式的应用)
  5. 字符串常量池
  6. 字符串修改分析
  7. 主方法组成分析
  8. String类常用方法
  9. JavaDoc文档介绍
    引言:在实际项目开发中,String是一个必须使用的程序类,可以说是项目的核心组成类。在java程序里所有的字符串都要使用"“进行定义,同时也可以利用”+"实现字符串的连接处理,但是对于String类实际上还有其自身的特点,本笔记将通过具体的实例和概念进行String类的特点分析

1.String类对象实例化

返回目录
String实例化对象有两种方式:直接赋值实例化构造方法实例化
源码分析:
JDK1.8之前String保存的是字符数组:private final char value[];
JDK1.9之后String保存的是字节数组:private final byte[] value;
由JDK1.9之后的版本可以看出:字符串就是对数组的一种特殊包装应用,而对数组而言最大的问题在于长度固定。
构造方法实例化String类对象:
构造方法:public String(String str)
实例化代码:String str=new String(“shmily”);
分析:
利用构造方法实例化String类对象可以采用的对象实例化格式进行处理操作,这种方法更为直观,其最终的结果与直接赋值效果相同。但两者之间还是有本质区别的,下面来逐步分析

2.字符串比较

返回目录
"=="与equals方法的区别:
https://editor.csdn.net/md/?articleId=115827164
这里再补充一点:

    @Test
    public void test(){
        String str="shmily";
        String str2=new String("shmily");
        String str3="shmily";
        String str4=new String("shmily");
        System.out.print("直接赋值与构造赋值地址用==相比结果:");
        System.out.println(str==str2);
        System.out.println("直接赋值与构造赋值地址用equals方法相比结果:"+str.equals(str2));
        System.out.println("*****************************************");
        System.out.print("直接赋值与直接赋值地址用==相比结果:");
        System.out.println(str==str3);
        System.out.println("直接赋值与直接赋值地址用equals方法相比结果:"+str.equals(str3));
        System.out.println("*****************************************");
        System.out.print("构造赋值与构造赋值地址用==相比结果:");
        System.out.println(str2==str4);
        System.out.println("构造赋值与构造赋值地址用equals方法相比结果:"+str2.equals(str4));
    }

运行结果:
在这里插入图片描述
对于以上结果再次说明了==只能用于基本数据类型的比较(唯一特殊的就是String直接赋值之间可以使用其进行比较)
所以对String引用数据类型进行比较最好使用equals方法(字符也一样使用equals方法比较)
对比源码还是能发现Object提供的equals方法的底层(这是需要我们覆写的)和String类中的equals方法的底层是不一样的。

3.字符串常量

返回目录
String直接赋值是一个String类的匿名对象的书写方式。
这里就提一个避免空指针异常问题的书写方法(NullPointerException):
容易产生空指针异常的写法:
public class Test{
String str;
@Test
public void test{
System.out.println(“a”.equals(str));//如果str没有初始化赋值就会产生空指针异常,
//根源在equals方法没有得到参数而报的异常,解决方法就是保证equals方法必得参数:
System.out.println(str.equals(“a”));
}
}

4.两种实例化方式比较

返回目录
直接赋值和构造赋值,在初始赋值时会开辟一块内存空间,如果再有相同的赋值也不会重复开辟新的空间引用指向之前开辟的空间,该例子字符串比较那里可以看出,下面来介绍该机制
字符串对象池:
实际上,在JVM的底层存在有一个对象池(String只是对象池中保存的一种类型,此外还有多种其他类型)当代码中使用了直接赋值的方式定义了一个String对象时,会将此字符串对象所使用的匿名对象入池保存,如果后续还有其他String类对象也采用了直接赋值的方式,并且设置了同样内容,那么将不会开辟新的堆内存空间,而是使用已有的对象进行引用的分配,从而继续使用。(使用构造方法定义的不会入池)
对象池本质为共享设计模式的一种应用
手动使构造方法实例化的String对象入池:public String intern();

    @Test
    public void test02(){
        String str01=new String("a").intern();
        String str02="a";
        System.out.println(str01==str02);//true
    }

推进直接赋值的方法进行字符串的定义。

5.字符串常量池

返回目录
讲的大致差不多与4相同,就一个区别:
字符串常量池分为:

  • 静态常量池
    运行前就赋完值,相同内容的字符串地址相同(引用会指向池内)
    @Test
    public void test02(){
        String str01="abc";
        String str02="a"+"b"+"c";
        System.out.println(str01==str02);//true
    }
  • 运行时常量池
    运行时进行拼接赋值,相同的内容字符串地址不同(引用不会指向池内)
    @Test
    public void test02(){
        String str01="abc";
        String str02="b";
        String str03="a"+str02+"c";//运行时赋值
        System.out.println(str01==str03);//false
    }

4和5的对象池是关于==的,构造赋值和equals方法要仔细判别!!!

6.字符串修改分析

返回目录
不断的使用+来拼接字符串,字符串的会不断的产生垃圾空间!!!
尽可能减少字符串的赋值操作是保证大项目运行流畅的保障!!!

7.主方法组成分析

返回目录
在javaSE的笔记中已经分析过了:
https://editor.csdn.net/md/?articleId=118931842
““是用于特殊字符的:例如Hello World因为中间有空格分开,传参会成为是两个字符串,要想使其为一个字符串就得加上””:“Hello World”

8.String类常用方法

返回目录
【1】常用构造方法
在这里插入图片描述
【2】常用的所有方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述为常用方法就不一一介绍了,相信看文字也看得懂,更多方法请使用JavaDoc文档查询

9、JavaDoc文档介绍

返回目录
API应用手册请联系作者领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharmDeer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值