第十三章 常用类(包装类和String 相关类)

news2024/12/26 11:01:44

一、包装类

1. 包装类的分类

(1)针对八种基本数据类型相应的引用类型—包装类

(2)有了类的特点,就可以调用类中的方法。

 

 

2. 包装类和基本数据的转换

(1)jdk5 前的手动装箱和拆箱方式

public class Test {

    public static void main(String[] args) {

        int n1 = 100;
        //jdk5 前的手动装箱和拆箱方式
        //装箱
        Integer integer = new Integer(n1);
        Integer integer1 = Integer.valueOf(n1);

        //拆箱
        int i = integer.intValue();
    }
}

(2)jdk5 及以后的自动装箱和拆箱方式

public class Test {

    public static void main(String[] args) {

        int n1 = 100;
        //jdk5 及以后的自动装箱和拆箱方式
        //装箱
        Integer integer = n1;// 底层是 Integer.valueOf()

        //拆箱
        int i = integer;// 底层是 intValue()
    }
}

3. 包装类型和 String 类型的相互转换

public class Test {

    public static void main(String[] args) {

        //包装类(Integer)->String
        Integer i = 100;//自动装箱
        //方式 1
        String str1 = i + "";
        //方式 2
        String str2 = i.toString();
        //方式 3
        String str3 = String.valueOf(i);

        //String -> 包装类(Integer)
        String str4 = "12345";
        //方式 1
        Integer i2 = Integer.parseInt(str4);//使用到自动装箱
        //方式 2
        Integer i3 = new Integer(str4);//构造器
    }
}

4. Integer 类和 Character 类的常用方法

public class Test {

    public static void main(String[] args) {

        System.out.println(Integer.MIN_VALUE); //返回最小值
        System.out.println(Integer.MAX_VALUE);//返回最大值
        System.out.println(Character.isDigit('a'));//判断是不是数字
        System.out.println(Character.isLetter('a'));//判断是不是字母
        System.out.println(Character.isUpperCase('a'));//判断是不是大写
        System.out.println(Character.isLowerCase('a'));//判断是不是小写
        System.out.println(Character.isWhitespace('a'));//判断是不是空格
        System.out.println(Character.toUpperCase('a'));//转成大写
        System.out.println(Character.toLowerCase('A'));//转成小写
    }
}

二、String 类(P466)

1. String 类的理解和创建对象

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

(2)字符串常量对象是用双引号括起的字符序列。

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

(4)String类 实现了接口 Serializable【String 可以串行化:可以在网络传输】

(5)String类 实现了接口 Comparable 【String 对象可以比较大小】

(6)String 是 final类,不能被其他的类继承

(7)String有属性private final char value[]:用于存放字符串内容

(8)一定要注意:value是一个final类型,不可以修改【即value不能指向新的地址,但是单个字符内容是可以变化】

(9)字符串常用构造器

public class Test {

    public static void main(String[] args) {

        String s1 = new String();

        //public String(String original)
        String s2 = new String("字符串");

        //public String(char value[])
        char[] data = {'a','b','c'};
        String s3 = new String(data);

        //public String(char value[], int offset, int count) 
        String s4 = new String(data,1,2);

    }
}

2. 两种创建 String 对象的区别

方式一:直接赋值 String s= "hsp" ; 
方式二:调用构造器 String s2 = new String("hsp");
(1)方式一:先从常量池查看是否有 “hsp” 数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s 最终指向的是常量池的空间地址
(2)方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有“hsp”,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
(3)画出两种方式的内存分布图

3. 字符串的特性

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

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

        // 编译器自动优化为 String str = "helloabc";
        String str = "hello" + "abc";
        String s1 = "hello";
        String s2 = "abc";
        // 1,先创建一个 StringBuilder sb = StringBuilder()
        // 2. 执行 sb.append("hello");
        // 3. sb.append("abc”);
        // 4. String str = sb.tostring()
        // 最后其实 str -> 堆中的对象(String) value[] -> 池中"helloabc"
        String str = s1 + s2;

        String s3 = "helloabc"; // s3 -> 池中"helloabc"
        System.out.println(str == s3); // false

重要规则:

String c1 = "ab" + "cd";常量相加,看的是池。

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

4. String 类的常见方法

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

equals        //区分大小写,判断内容是否相等
equalslgnoreCase        //忽略大小写的判断内容是否相等
length        //获取字符的个数,字符串的长度
indexOf        //获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastlndexOf        //获取字符在字符串中最后1次出现的索引索引从0开始,如找不到,返回-1
substring        //截取指定范围的子串
trim        //去前后空格
charAt        //获取某索引处的字符,注意不能使用Strtindex]这种方式

toUpperCase        //字符串转换成大写

toLowerCase        //字符串转换成小写

concat        //拼接字符串

replace        //替换字符串中的字符

split        //分割字符串。对于某些特殊分割字符,我们需要转义符 \ 

toCharArray        //转换成字符数组

compareTo        //比较两个字符串的大小。从第一个字符开始比较,如果不同就相减。

        String str1 = "cbaa";
        String str2 = "cbaa";
        System.out.println(str1.compareTo(str2));// 0
        String str3 = "aba";
        System.out.println(str1.compareTo(str3));// 2 c-a
        String str4 = "cfa";
        System.out.println(str1.compareTo(str4));// -4 b-f
        String str5 = "cba";
        System.out.println(str1.compareTo(str5));// 1 str1.len - str5.len = 1

format        //格式字符串

        String name = "john";
        int age = 10;
        double score = 56.857;
        char gender = '男';

        //1. %s、%d、%.2f、%c 称为占位符
        //2. 这些占位符由后面变量来替换
        //3. %s 表示后面由 字符串来替换
        //4. %d 是整数来替换
        //5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位,并且进行四舍五入的处理
        //6. %c 使用 char类型米替换
        String formatstr = "我的姓名是 %s 年龄是 %d 成绩是 %.2f 性别是 %c.希望大家喜欢我!";
        String info2 = String.format(formatstr, name, age, score, gender);
        System.out.println(info2);

三、StringBuffer类(P475)

 java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。

很多方法与 String 相同,但 StringBuffer 是可变长度的。

StringBuffer 是一个容器。

(1)StringBuffer 的直接父类是 AbstractStringBuilder
(2)StringBuffer 实现了 Serializable,即 StringBuffer 的对象可以串行化
(3)在父类中 AbstractStringBuilder 有属性 char[] value,不是final。该 value数组 存放字符串内容,因此存放在堆中的。
(4)StringBuffer 是一个 final 类,不能被继承。

1. String VS StringBuffer

(1)String 保存的是字符串常量,里面的值不能更改。每次 String 类的更新实际上就是更改地址,效率较低。// private final char value[]
(2)StringBuffer 保存的是字符串变量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用更新地址,效率较高。 // char value 【这个放在堆】

2. StringBuffer 构造方法

3. String 与 StringBuffer 转换

        // String -> StringBuffer
        String str = "hello";
        // 方式1
        StringBuffer sb1 = new StringBuffer(str);
        // 方式2
        StringBuffer sb2 = new StringBuffer();
        sb2.append(str);

        // StringBuffer -> String
        // 方式1
        String str1 = sb1.toString();
        // 方式2
        String str2 = new String(sb1);

4. StringBuffer类 常见方法

(1)增:append

(2)删:delete(start,end)

        // 删除索引为 >=start && <end 处的字符
        StringBuffer sb = new StringBuffer("hello,Jack.Hi");
        // 5:,
        // 9:k
        sb.delete(5,9);
        System.out.println(sb);    // hellok.Hi

(3)改:replace(startend,string)

        // 改:替换索引6-10的字符,包含6,不包含10
        StringBuffer sb = new StringBuffer("hello,Jack.Hi");
        // 6:J
        // 10:.
        sb.replace(6,10,"Tom");
        System.out.println(sb);    // hello,Tom.Hi

(4)查:indexof【查找子字符串在字符串第一次出现的索引,如果找不到返回 -1】

(5)插:insert

        // 插:在索引6的位置,插入Tom。原来索引为6的内容自动后移
        StringBuffer sb = new StringBuffer("hello,Jack.Hi");
        // 6:J
        sb.insert(6,"Tom/");
        System.out.println(sb);    // hello,Tom/Jack.Hi

(6)length:获取长度

四、StringBuilder 类(P479)

(1)一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作 StringBuffer 的一个简易替换,用在字特串缓种区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

(2)在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。

(3)StringBuilder 和 StringBuffer 均代表可变的字符序列,方法是一样的,所以使用和StringBuffer 一样。

StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用 StringBuilder。

1. String、 StringBuffer 和 StringBuilder 的比较

(1)StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样

(2)String:不可变字符序列,效率低,但是复用率高

(3)StringBuffer:可变字符序列、效率较高(增删)、线程安全

(4)StringBuilder:可变字符序列、效率最高、线程不安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好友靠JVM成功进入阿里,阿里P8力荐的JVM笔记到底有什么魔力?

大家都是有经验的Java开发人员&#xff0c;想想为何要学习JVM? [面试?调优?装逼? ] 不管出于何种原因&#xff0c;总之你得先学好。那怎么学好呢? 每个人对于JVM的了解可能不一样&#xff0c;这就要考虑到怎么切入 既然大家都学习过Java&#xff0c;那不妨就从Java开始…

数据分析思维(四)|分类/矩阵思维

分类与矩阵思维 1、概念 在进行数据分析工作时&#xff0c;我们往往会涉及到多个核心指标&#xff0c;而对于不同数值核心指标的结合又会产生多种不同的结果&#xff0c;我们将相似结果的内容放到一起进行统一决策就会大大节省数据分析的时间&#xff0c;这种思想我们称之为分…

[python入门㊲] - python的继承

目录 ❤ 什么是继承 ❤ 派生和继承 ❤ 单继承 ❤ 多继承 ❤ MRO[方法搜索顺序](多继承顺序) ❤ 新式类和旧式&#xff08;经典&#xff09;类 ❤ 什么是继承 通过继承基类来得到基类的功能 所以我们把被继承的类称作父类或基类&#xff0c;继承者被称作子类 可…

注册外贸公司需要注意的问题

关于注册海外公司需要注意事项&#xff0c;米贸搜以美国为例&#xff0c;整理以下信息&#xff0c;希望可以帮助到你一、注册美国公司注意事项&#xff1a;1、拟定要注册的美国公司名称三个&#xff08;英文&#xff09;&#xff0c;核名如无重复则可使用&#xff1b;2、美国公…

matlab机电耦合系统相位分岔图

1、内容简介略638-可以交流、咨询、答疑2、内容说明略3、仿真分析clcclose allclear%% parameterglobal CC 48;tspan [0 5]; % 仿真时间x0 [0.1 0.1 0.1 0.1]; % 变量初始值[T,X] ode45(model_diff, tspan, x0); % 调用求解器X3_dot [0;diff(X(:,3))./diff(T)]; % 求解x3的…

【已解决】SpringCloudConfig客户端启动无法读取到配置参数

自己部署了一个Spring Cloud微服务项目&#xff0c;实践Spring Cloud Config分布式配置组件&#xff0c;按照Spring Cloud Config 资料Config&#xff1a;Spring Cloud分布式配置组件 先后创建了Eureka注册中心服务、 Spring Cloud Config Server服务、 Spring Cloud Config Cl…

极客星球 | Elasticsearch入门与实战技术分享

为持续夯实MobTech袤博科技的数智技术创新能力和技术布道能力&#xff0c;本期极客星球邀请了MobTech企业服务研发部工程师勤佳&#xff0c;从Elasticsearch集群安装、DSL语句讲解、深度分页、IK分词器、滚动索引等方面进行了阐述和分享。 一、集群环境安装 elasticsearch 是…

节后转岗“浪潮”来了!瞅准“趋势向上”的行业!

“跨行跨岗人员&#xff0c;怎么能顺利转行&#xff1f;”的话题一直存在&#xff01;成功人士给出一条转岗转行的原则&#xff1a;迁移到技能相近但趋势向上的岗位。那么&#xff0c;什么叫“技能相近”和“趋势向上”呢&#xff1f;让我们来看看。趋势向上除了技能相近&#…

现阶段元宇宙经常偏离原有的发展轨道,使其失去该有的功能和意义

人们总是会自然地陷入到约定俗成的俗套之中。对于元宇宙&#xff0c;同样未能免俗。即使是那些处于头部的玩家&#xff0c;亦不例外。比如&#xff0c;扎克伯格就仅仅只是将元宇宙看成了一个将脸书带离泥潭的工具&#xff0c;一味地迎合资本&#xff0c;而最终忽略了元宇宙最本…

日常避坑--input输入框type=number仍可以输入“e“,“.“等符号

问题发现在使用ElementUI的input框时候&#xff0c;我们有时候需要只让用户输入数字类型。这个时候你可能就会想到<input type"number">,思路没错&#xff0c;但是踩着坑啦。我定义了一个number类型的input框但是&#xff0c;输入框仍旧可以输入"e",…

hadoop安装(二、hadoop)(备忘)

hadoop安装hadoop更改文件配置配置core-site.xml配置hadoop-env.sh配置hdfs-site.xml配置mapred-site.xml配置yarn-site.xml配置环境hadoop安装安装hadoop 紧接上文&#xff0c;解压过的hadoop內部文件为 再进入etc内部的hadoop 修改hadoop313的权限 在/opt目录下&#xff0…

分享24个网页游戏源代码,总有一个是你想要的

分享24个网页游戏源代码 24个游戏源代码下载链接&#xff1a;https://pan.baidu.com/s/1gYJlj8enJbh5mFS_wMaZBA?pwd4ncb 提取码&#xff1a;4ncb 下面是项目的名字&#xff0c;我放了一些图片&#xff0c;大家下载后可以看到。 Html5JS网页版捕鱼达人游戏 HTML5水果忍者游戏…

杂谈---名言警句记录

我们总喜欢拿顺其自然来敷衍人生道路上的荆棘与坎坷,却很少承认真正的顺其自然其实是竭尽所能之后的不强求,而并非两手一摊的不作为.没有那一次巨大的历史灾难,不是以历史的进步作为补偿.今日长缨在手,何时缚住苍龙?男人遇到真爱时第一反应是胆怯&#xff0c;女人遇到真爱的第…

这份2023软件测试面试技巧,助你拿下满意offer

求职&#xff0c;就像打仗&#xff0c;不仅是一场挑战自己的战斗&#xff0c;也是一场与用人单位的较量。而求职者只有准备足够充分&#xff0c;才能在这场毫无硝烟的“战场”上取得胜利。那么软件测试面试需要做哪些准备以及软件测试面试需要哪些技巧呢&#xff1f;1、熟悉岗位…

JDBC数据库连接池

目录JDBC原理图1. 数据库连接的5种方式2.ResultSet底层3.Statement sql注入3.1 PreparedStatement4. Jdbc工具类4.1 工具类应用5.Jdbc事务6.批处理6.1 批处理原理7.数据库连接池7.1 c3p07.2 德鲁伊7.2.1 德鲁伊工具类8.Apache-DBUtils工具类8.1多条查询&#xff0c;BeanListHan…

Web3中文|火遍全网的去中心化推特「Damus」是什么?(附操作指南)

Damus是一个建立在去中心化网络上的社交软件&#xff0c;被称为“推特杀手”&#xff0c;现已在苹果应用商店上线。 1月31日&#xff0c;Damus团队在推特上证实了这一消息&#xff0c;此前该团队称已经被苹果公司拒绝了至少三次。 不久之后&#xff0c;Twitter联合创始人Jack…

Anaconda3安装

Anaconda3安装 step1 下载Anaconda 网址&#xff1a;https://www.anaconda.com/products/individual 点击红色方框中的Download下载最新版本的Anaconda软件&#xff0c;可选择windows/Linux/Mac系统。 Step2 安装过程 双击.exe文件 2.选择Next>,进行下一步。 3.点击 …

论文投稿指南——中文核心期刊推荐(水产、渔业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

蓝海彤翔董事长鲁永泉荣获太湖科学城功能片区2022年度表彰

新春伊始、喜讯传来。昨天&#xff08;1月31日&#xff09;&#xff0c;太湖科学城功能片区推进“敢为、敢闯、敢干、敢首创”动员会在太湖光子科技园举行。会上&#xff0c;78家企业和30名优秀企业家及个人获得表彰&#xff0c;蓝海彤翔董事长、蓝海创意云创始人鲁永泉荣获太湖…

Git最佳实践-Git flow

Git分支管理背景 Git是当下最流行的版本管理系统&#xff0c;阮一峰在自己的博文中提到过&#xff1a;“如果你严肃对待编程&#xff0c;就必定会使用版本管理工具”。Git操作是基于分支的&#xff0c;当下环境衍生出多种优秀的分支管理策略&#xff0c;其目的就是要保证不同分…