7.Java中的String类、常用类及包装类

news/2024/5/4 6:22:59/文章来源:https://blog.csdn.net/weixin_44203782/article/details/130138219

Java中的String类、常用类及包装类

一、String类

1、String类定义
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

代码示例:

    String str_1="abc";String str_2="abc";System.out.println(str_1==str_2);String str_3=new String("abc");String str_4=new String("abc");System.out.println(str_3==str_4);

在这里插入图片描述
代码解析:
在这里插入图片描述

String类是不可变的,所以在创建对象时,如果直接赋值,相当于多个对象指向同一个内存区域;当创建对象使用new关键字时,相当于开辟不同的内存,所以指向也不同。“==”判断引用数据类型时,判断的是内存地址,所以输出结果为true和false。
2、字符串的特点

  • String类是被final修饰的,是不能被继承的。
  • String类底层使用数组结构。jdk9以前使用的是char[],jdk9以后使用的是byte[]。
  • String的对象一旦创建就不能修改,底层维护了一个字符串常量池,实现共享。
  • String类的对象每次修改都会产生一个新的对象。

3、String类的常用方法

  • charAt(int index) :返回字符串中第index个字符,index从0开始
  • toCharArray():将String转为字符串数组
  • length() :返回字符串的长度
  • indexOf(String str):返回字符串中出现str的第1个位置
  • indexOf(String str, int fromIndex):返回字符串中, 从第fromIndex个字符数起,
    出现str的第1个位置, 这个方法是上面方法的重载
  • lastIndexOf(String str):返回字符串中出现str的最后1个位置
  • equals(String str):比较两个字符串是否相等
  • equalsIgnoreCase(String str):忽略大小写, 比较两个字符是否相等.
  • replace(char oldChar, char newChar):返回1个新字符串,
    该新字符串内的oldChar被newChar替换掉, 注意旧字符串没有被修改.
  • startsWith(String prefix):判断字符串是否以 prefix 开头
  • endsWith(String suffix):判断字符产是否以suffix 结尾
  • subString(int beginIndex):截取从第beginIndex个字符开始到最后1个字符, 返回1个新字符串
  • subString(int beginIndex, int endIndex):截取从第beginIndex个字符开始,
    第endIndex个字符, 返回1个新字符串, 是上面方法的重载
  • valueOf(…):这个是静态方法. 可以把其他基本数据类型转换成String对象

4、String、StringBuffer和StringBuilder
String、StringBuffer和StringBuilder的联系
三者都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。
StringBuffer是线程安全,可以不需要额外的同步用于多线程中;
StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;
StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。

String、StringBuffer和StringBuilder的区别

  • 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer >
    String(String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。)
  • 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

StringBuffer和StringBuilder的常用方法有:

  • append方法:将字符(或字符串)追加到该序列的末尾
  • insert方法:将字符(或字符串)插入到该序列的指定位置
  • delete方法:从该序列中删除指定位置的字符
  • replace方法 :替换该序列中指定位置的字符串
  • substring方法:字符串截取,返回一个替换好的String值
  • reverse方法:反转该字符序列
  • toString方法: 将对象转换为String

总结String、StringBuffer和StringBuilder

  • String:适用于少量的字符串操作的情况
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

二、常用类

1、Math类

Math类中包含了用于执行基本数学运算的方法,如:小数取整、绝对值、随机数等;Math类中提供的方法都是静态方法,可以通过类名直接调用

  • PI静态常量: 表示圆周率
  • floor方法:小数取整,向下取整
  • ceil方法:小数取整,向上取整
  • round方法:小数取整,四舍五入

2、 Random类

用于生成随机数

  • nextBoolean方法:用于生成一个随机boolean值
  • nextDouble方法:用于生成一个0-1(不包括1)之间的随机小数
  • nextInt(int end)方法:用于生成一个0至指定值的随机整数,不包括整个指定的值

3、Date类

获取日期

  • getTime方法:获取当前时间的毫秒数,从1970年1月1日开始
  • toLocaleString方法: 获取当地时间,返回值是一个字符串

4、SimpleDateFormat类

日期、时间格式化类

  • format方法:格式化日期(yy-MM-dd hh:mm:ss)
  • parse方法:将字符串转换为日期

三、包装类

Java是面向对象的语言,但是为了便于开发者的使用,Java中保留了基本数据类型,在进行基本的数据计算时,开发者可以直接使用基本数据类型。但是当需要和其他对象结合使用,如存入集合中,就需要将基础数据类型实例化为Java对象,为了面向对象的这一特性,基本数据类型中的每一个类型在java.lang包中都有一个包装类,即将每个基本类型都包装成了一个类。
在这里插入图片描述
基本数据类型和引用数据类型的对应关系
在这里插入图片描述
基本数据类型和引用数据类型的相互转化

  • 装箱:基本数据类型转换为包装类
  • 拆箱:包装类转换为基本数据类型。

自动装箱就是自动将基本数据类型转换为包装器类型;自动拆箱就是自动将包装器类型转换为基本数据类型。自动装箱和拆箱都是在编译阶段就完成的。自动装箱的时候,java编译器会默认调用valueOf进行装箱,拆箱时会调用**Value方法。

          //1.自动装箱int t1=1;Integer t2=t1;//2.手动装箱Integer t3=new Integer(t1);System.out.println("int类型t1="+t1);System.out.println("自动装箱,Integer类型对象t2="+t2);System.out.println("手动装箱,Integer类型t3="+t3);      //1.自动拆箱int t4=t2;//2.手动拆箱//通过intValue()方法返回int值,还可以利用其他方法装换为其他类型int t5=t2.intValue();System.out.println("自动拆箱,int型t4="+t4);System.out.println("手动拆箱,int型t5="+t5);

Java包装类注意事项

  • 所有包装类都可以将与之对应的基本数据类型作为参数来创建它们的实例对象
  • 除了Character类之外,其他包装类都可以将一个字符串作为参数来构造它们的实例
  • Boolean类的构造方法参数为String类型时,若该字符串为true(不论大小写),则该对象表示true,否则表示false
  • 当包装类Number构造方法的参数为String类型时,字符串不能为null,并且该字符串必须能够解析为基本类型的数据
  • 集合不允许存放基本数据类型,故常用包装类
  • 包含了每种基本数据类型的相关属性,如最大值、最小值、所占位数等
  • 作为基本数据类型对应的类型,提供了一系列实用的对象操作,如类型转换、进制转换等方法

Java中的比较“==”和“equals”

包装类中的equals方法和String类一样,都是重写了Object类中的equals方法,因此比较的是内容而不是地址,而“= =”比较的依然是引用变量的地址,只是当包装类型和与之相对应的基本类型进行“= =”比较时会先做自动拆箱处理。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新一代AI带来更大想象空间!上海将打造元宇宙超级场景!

引子 上海市经信委主任吴金城4月12日在“2023上海民生访谈”节目表示,上海将着力建设元宇宙智慧医院、前滩东体元宇宙、张江数字孪生未来之城等元宇宙超级场景。 吴金城说,新一代人工智能将带来更大的想象空间。比如,人工智能和元宇宙数字人的…

【论文阅读】MAMIL

1、基本信息 misc{Konstantinov_Utkin, title{Multi-Attention Multiple Instance Learning}, author{Konstantinov, AndreiV. and Utkin, LevV.} }2、摘要 本文提出了基于多注意力的MIL问题求解方法,该方法考虑了包中每个被分析实例的相邻实例。在该方法中&…

【记录】Git连接gitee、新建仓库

学习记录1.连接gitee2.新建仓库1.连接gitee https://www.cnblogs.com/cokefentas/p/14727592.html git安装与卸载 apt-get install git apt-get remove gitgit配置 配置用户名 git config --global user.name "your name" 配置邮箱 git config --global user.email…

学习安全攻防技能30讲-开篇|别说你没有被安全困扰过

文章目录学习安全攻防技能30讲-开篇|别说你没有被安全困扰过研读开篇安全重要吗?安全难学吗?学习安全攻防技能30讲-开篇|别说你没有被安全困扰过 研读开篇 文中说到一个竞赛叫CTF,这个之前从来没有听过的,作为开发人员涨知识了。…

5V的LDO电源的WCCA分析-可靠性分析计算过程

WCCA(WorstCase Circuit Analysis)分析方法是一种电路可靠性分析设计技术,用来评估电路中各个器件同时发生变化时的性能,用于保证设计电路在整个生命周期的都可以可靠工作。通过WCCA分析,验证在上述参数在其容差范围内发生变化时,…

springboot+thymeleaf实现发Html邮件自由

2019年,我刚接触测试架构和测试开发类的工作时,经常会有自动化发邮件的功能,大都是从各个平台自动化统计一些数据出来,每周定时发一封邮件给领导交差,回过头来再看看我发的邮件,不美观,不专业。…

JUC并发编程之AQS原理

1. AQS 原理 1.1 概述 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个生态,控制如何获…

医院不良事件报告系统源码:基于PHP+vue2+element+laravel8技术开发

医院不良事件报告系统源码 文末获取联系! 技术架构:前后端分离,仓储模式, 开发语言:PHP 开发工具:vscode 前端框架:vue2element 后端框架:laravel8 数 据 库:mysql5…

Vue3 关于setup与自定义指令

setup语法糖 最大好处就是所有声明部分皆可直接使用&#xff0c;无需return出去 注意&#xff1a;部分功能还不完善&#xff0c;如&#xff1a;name、render还需要单独加入script标签按compositionAPI方式编写 // setup 下还可以附加<script> setup语法糖独有 &…

用SSH登陆Centos系统时,命令行最前面显示“的提示符[root@www myapp]”是什么意思?

用SSH登陆Centos系统时&#xff0c;命令行最前面显示“的提示符[rootwww myapp]”是什么意思&#xff1f; 在SSH登录到CentOS系统时&#xff0c;提示符 [rootwww myapp] 中的 www 表示当前登录的主机名&#xff08;hostname&#xff09;&#xff0c;也就是指当前运行的CentOS系…

《程序员面试金典(第6版)》面试题 10.03. 搜索旋转数组(二分法,分钟思想,入门题目)

题目描述 搜索旋转数组。给定一个排序后的数组&#xff0c;包含n个整数&#xff0c;但这个数组已被旋转过很多次了&#xff0c;次数不详。请编写代码找出数组中的某个元素&#xff0c;假设数组元素原先是按升序排列的。若有多个相同元素&#xff0c;返回索引值最小的一个。 示例…

4.12~(小组成员对话预习)

注意我们这里观察的是XP的kernel32.dll&#xff0c;到win10是有变化的 看了这个函数&#xff0c;似乎是让BasepExeLdrEntry不存在的时候初始化一遍&#xff0c;然后进行对比是否已经加载过这个dll&#xff0c;那么如果加载下一个dll的时候&#xff0c;BasepExeLdrEntry是不是还…

SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表

设置到服务资源库连接的检查列表 1. 企业服务资源库的地址必须在 SAP 系统中已知 检查报表 SPROX_CHECK_IFR_ADDRESS。2. 要连接到企业服务资源库&#xff0c;必须维护 RFC 目标 "SAP_PROXY_ESR"。此 RFC 目标将由代理生成 / 事务 SPROXY 使用。必须使用事务 SM59 进…

规模化敏捷框架:Scrum@Scale

Scrum 敏捷方法有助于团队成员之间更有效地合作&#xff0c;实现共同的业务目标。但是当一个组织想要扩展 Scrum 方法到更多的团队时&#xff0c;应该如何实施&#xff1f;Scrum 仅为单团队开发、交付和运维产品提供了一个框架&#xff0c;而 ScrumScale&#xff08;SS&#xf…

Ubuntu20.04 安装QGIS

qgis的git&#xff1a; GitHub - qgis/QGIS: QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS) qgis的官网:Welcome to the QGIS project! qgis插件包下载地址&#xff1a;https://plugins.qgis.org/plugins/ 1.Prerequisi…

【LeetCode每日一题: 1039. 多边形三角剖分的最低得分 | 暴力递归=>记忆化搜索=>动态规划 | 区间dp 】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

【从零开始学Skynet】基础篇(七):Mysql数据库常用API

在上一篇中我们完成了对Mysql数据库的准备工作之后&#xff0c;这一篇我们写一个程序测试一下。 1、Mysql API 在写程序之前&#xff0c;我们先学习一下Mysql数据库常用API的使用&#xff1a; API说明mysql.connet(args)连接数据库&#xff0c;参数args是一个Lua表&#xff0c…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现

【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 1 题目 电商物流网络由物流场地&#xff08;接货仓、分拣中心、营业部等&#xff09;和物流场 地之间的运输线路组成&#xff0c;如图 1 所示。受节假日和“双十一”、“618”等…

octave安装使用——吴恩达机器学习

下载octave 解压后双击octave.vbs进行安装 配置 pkg rebuildpkg list 使用基础命令 使用矩阵命令 移动数据 size&#xff1a;矩阵的行和列length&#xff1a;行和列的最大值 读取和存储数据 load&#xff1a;加载文件who&#xff1a;所有变量whos&#xff1a;更详细的变量…

Java容器使用注意点

前置&#xff1a;问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一&#xff1a;集合判空 《阿里巴巴 Java 开发手册》的描述如下&#xff1a; 判断所有集合内部的元素是否为空&#xff0c;使用 isEmpty() 方法&#xff0c;而不是 size()0 的方式。 我们在开发中也…