Java中String不可变性及类内常见函数

String 类型解析

String不可变性

下方为String类型源码的简洁版

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    }

由此看出,String类型数据不可变原因有两点:

  1. String类型被final 修饰,说明任何对String类型的操作不能被继承和重写。
  2. String类中用于存储数据是用final和private修饰的char类型数组value。value被final修饰说明value一旦被赋值,内存中无法更改。value被private修饰说明外部无法访问,且String类为开放value外部赋值的方法,所以外部无法赋值。

因为String的 不可变性,每次对String进行修改都要用新变量存储返回值。

String相等判断: equals函数

源码如下:

public boolean equals(Object anObject) {
		//判断this字符串和anObject内存地址是否相等
        if (this == anObject) {
            return true;
        }
        // 判断anObject是否为String类型
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            //判断两个字符串长度是否相等
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                //比较字符串中每一个字符
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
  • equals函数和==判断字符串相等的区别?
    如上方源码所示,==比较两个变量地址是否相等,地址相等的两个变量,值一定相等。equals函数比较两个变量的函数值是否相等,两个变量的值相等,地址不一定相等。
  • equalsIgnoreCase函数做相等判断时忽略大小写。

replace函数

replace方法共有replace、replaceAll、replaceFirst三种,传入参数不同,为方便记忆可都传入字符串格式。

	public void testReplace(){
        String s="hello world.";
        System.out.println("替换前字符串为"+s);
        //replace能传入字符和字符串
        s=s.replace('l','p');
        System.out.println("替换单个字母"+s);
        //replaceAll只能传入字符串
        s=s.replaceAll("p","x");
        System.out.println("替换全部"+s);
        //replaceFirst只能传入字符串
        s=s.replaceFirst("x","y");
        System.out.println("替换第一个字母"+s);
    }

运行结果如下:
在这里插入图片描述

split 函数

split(String s,int n),s为切割的字符,n为拆分的元素个数,如果缺失n参数,则拆分字符串中所有分割字符。

String s="ss,aa,tt,fd,d,,d";
//切割结果["ss","aa","tt","fd","d","","d"]
s.split(",");
//切割结果["ss","aa","tt,fd,d,,d"]
s.split(",",3);
//切割结果["ss","aa","tt","fd","d","","d"]
s.split(",",10);
//切割结果["ss","aa","tt","fd","d","","d"]
s.split(",",-2);

substring 函数

substring(int begin, int end),取子串的范围[begin,end),如果没有end参数,则从开始位置取子串到末尾。
测试程序如下:

	public void testSubstring(){
        String s="01234567";
        System.out.println("取子串1:"+s.substring(1,5));
        System.out.println("取子串2:"+s.substring(2));

    }

测试结果为:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值