包装类(String、StringBuffer、StringBuilder) 重点

news2024/12/26 10:54:28

包装类(Wrapper Class)是Java中的一个重要概念,它们是用于将基本数据类型(如int, char, double等)封装成对象的类。使用包装类的主要目的是为了能够更好地与Java的集合框架(如ArrayList、HashMap等)进行交互,因为集合只能存储对象而不能直接存储基本数据类型。

Java中主要的包装类有:

  1. Integer:用于封装int类型。
  2. Character:用于封装char类型。
  3. Double:用于封装double类型。
  4. Float:用于封装float类型。
  5. Long:用于封装long类型。
  6. Short:用于封装short类型。
  7. Byte:用于封装byte类型。
  8. Boolean:用于封装boolean类型。

包装类提供了一些有用的方法,比如可以将字符串转换为相应的基本数据类型,或者获取基本数据类型的最大值和最小值等。同时,Java的自动装箱(autoboxing)和拆箱(unboxing)特性使得在基本数据类型和包装类之间的转换变得更加方便。例如,可以直接将一个int赋值给Integer对象,Java会自动完成这个转换。

包装类的继承关系

案例演示(JDK5之前):手动装箱

       //基本类型---->包装类型 (手动装箱)
        int i=10;
        //方法一
        Integer i1=new Integer(i);
        //方法二
        Integer i2=Integer.valueOf(i);
        
        //包装类型---->基本类型 (手动装箱)    
        Integer j=new Integer(99);
        int j1=j.intValue();

JDK5之后:自动装箱

       //基本类型---->包装类型
        int i=10;
        Integer i1=i;    //底层仍然是 Integer.ValueOf(i)方法

        //包装类型---->基本类型
        Integer j=new Integer(99);
        int j1=j;  //底层仍然是 intValue()方法

  //判断是否是数字
        System.out.println(Character.isDigit('a'));  //F
        System.out.println(Character.isDigit('1'));  //T
        //判断是不是字母
        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'));

Integer 的 valueOf 方法底层源码分析:

如果传入的参数在 low 和 high 之间(-128 到127)就直接返回该值;否则需要创建一个 Integer 对象(new Integer(xx) ).

例题练习:

x 不等于 y,因为超过范围,需要创建一个对象。

String 类的理解和创建对象(重点)

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

(2)字符串常量对象是用双引号括起来的字符序列。例如:"你好"、"12.97"、"boy"等

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

(4)String 类较常用的构造器:

String  s1=new  String( );

String  s2=new  String( String  original );

String  s3=new  String( char[ ] a );

String  s4=new  String( char[ ] a, int  startIndex, int  count);

可串行化:可以在网络传输

说明:

1、String 是 final 类,不能被其他类继承

2、String 有属性 private final char value[ ]; 用于存放字符串内容

3、一定注意: value 是一个 final 类型,不可以修改

String 类的创建 

两种创建String 对象的区别

方法一:直接赋值 

String s="good" ;

方法二:调用构造器 

String  s=new String("good") ;

方式一: 先从常量池查看是否有 "good" 数据空间,如果有,直接指向; 如果
没有则重新创建
,然后指向。s最终指向的是常量池的空间地址

方式二: 先在堆中创建空间,里面维护了value属性,指向常量池的 good 空间
如果常量池没有 "good" ,重新创建,如果有,直接通过value指向。最终指向
的是堆中的空间地址
画出两种方式的内存分布图(自行画)

a 、b 都是指向常量池。

字符串的特性

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

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

String 的一些常用方法:

  String S = "西游记,红楼梦,水浒传,三国演义";
        String[] strings = S.split(",");
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }

测试结果为(以逗号为分隔符):

6、toCharArray 转化成字符组

 String S = "happy";
        char[] strings = S.toCharArray();
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }

测试结果为:

7、compareTo 比较两个字符串的大小,如果前者大,则返回正数,后者大,则返回负数,如果相等,返回0.

String S = "happy";  
        String s="llx";
            System.out.println(S.compareTo(s));

测试结果为:

分析:

调试看底层源码:

底层方法会判断两个字符串是不是相等,显然不相等,会一个一个匹配, "happy" 第一个为 h,转化为数值是 104;" llx " 第一个是 l ,数值为 108;不相等,所以返回 c1 - c2;即104 -108= -4;所以输出结果为 -4。

 

--------------------------------------------------------------------------------------------------------------------------------

StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。很多方法和String相同,但是StringBuffer是可变长度的。

StringBuffer 是一个容器

构造方法:

 String 和 StringBuffer 相互转换

StringBuffer 常用方法: 

演示一个:

  StringBuffer S = new StringBuffer("Tom");  //长度为5
        // 增 :append
        S.append("说英语");
        System.out.println(S);

增后的结果为:

练习题:

价格转换:

 String price="1561611.15616";
        StringBuffer s=new StringBuffer(price);
        //找到小数点的索引,然后在该位置的前3位,插入逗号即可
        for (int i = s.lastIndexOf(".");i>0 ; i-=3) {
            s=s.insert(i,",");
        }
        System.out.println(s);

 结果为:

StringBuffer 类

 

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

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

相关文章

Modelsim仿真之VCD文件详解

目录 一、前言 二、VCD文件格式 2.1 头部 2.2 变量定义 ​ 2.3 值打印 2.4 值变化部分 2.5 VCD文件示例 三、VCD文件生成 3.1 工程代码 3.2 modelsim操作 3.3 VCD结果查看 3.4 VCD类型2 四、参考资料 一、前言 ​VCD&#xff08;Value change dump&#xff09;…

mv:自动对焦代码

try:# The camera will now focus on whatever is in front of it.sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) except:raise (Exception("Auto focus is not supported by your sensor/board combination."))

说说ip地址和mac地址的区别

随着互联网的飞速发展&#xff0c;网络连接已成为我们日常生活中不可或缺的一部分。然而&#xff0c;在享受网络带来的便利时&#xff0c;你是否曾好奇过那些让设备能够相互通信的关键技术&#xff1f;IP地址与MAC地址&#xff0c;作为网络通信中的两大基石&#xff0c;它们各自…

2023华为od机试C卷【API集群负载统计】Python实现

思路 统计第二层级上computing出现的次数的时候&#xff0c;只需要for循环寻找computing是否在字典的键中。 如果找到&#xff0c;计数的时候是加上computing对应的值 def main():import collectionslength_char int(input())node_info {}for i in range(length_char):char…

### 微软的传奇与未来:从车库到云端的飞跃

今天我要和大家聊聊科技界的超级明星——微软。这家公司几乎每个人都听过&#xff0c;从90年Windows全家桶&#xff0c;到现在的云端革命&#xff0c;微软的故事简直有点儿像科技界的“美国梦”。 #### **车库里的梦想** 一切都得从1975年说起。当时&#xff0c;比尔盖茨和保…

【博客22】缤果Android_USB串口调试助手V1.0(高级篇)

超级好用的Android_USB调试助手 ( Android Studio Java) 开发工具: android-studio-2022.2.1.20-windows.exe usb-serial-for-android 目录 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 2.其他扩展展示 2.1 USB枚举 2.2 波特率 2.3 自定义指令集 2.…

一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语

我们可能有时候在处理字符时需要处理到非ASCII的字符&#xff0c;比如将表情、阿拉伯语转换为Unicode字符&#xff0c;从而避免在传输时会出现乱码的情况。 Unicode验证网站&#xff1a; unicode转换网站 目的&#xff1a;转换下面除ASCII字符外的字符为Unicode字符&#x1f…

Upload-labs靶场Pass01-Pass21全解

文章目录 Pass-01 前端JSJS绕过上传或者用burp抓包的方式 Pass-02 MIME检测Pass-03 特殊文件后缀黑白名单绕过特殊文件名绕过 Pass-04 .htacess上传Pass-05 user.ini文件上传Pass-06 大小写绕过Pass-07 空格绕过Pass-08 .绕过Pass-09 ::$DATA绕过Pass-10 .空格.绕过Pass-11 双写…

⾃定义类型:联合和枚举详解

本章讲述的是自定义类型中联合和枚举&#xff0c;在本章我们将会认识联合体&#xff0c;枚举的声明&#xff0c;使用&#xff0c;以及联体的大小&#xff0c;枚举类型的优点。 1.联合体 1.联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#…

重新设计 Baklib 中的分析数据处理

数据库是任何应用程序性能最关键的部分之一。当谈到 Baklib 时&#xff0c;考虑到高度可扩展的 SaaS 环境&#xff0c;我们总是致力于提高应用程序的性能。 我们不断尝试提高应用程序的性能&#xff0c;在密切监视应用程序是否有任何挫折和改进的同时&#xff0c;我们发现每天…

推动未来的引擎:人工智能大模型的现状与发展

推动未来的引擎&#xff1a;人工智能大模型的现状与发展 一、引言 随着人工智能技术的迅速发展&#xff0c;人工智能大模型作为其中的重要组成部分&#xff0c;正逐渐成为推动科技进步的重要引擎。无论是在自然语言处理、计算机视觉&#xff0c;还是智能推荐等领域&#xff0…

快讯 | 苹果携手OpenAI,ChatGPT即将登陆iOS 18

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

MATLAB预测模型(3)

一、前言 在MATLAB中&#xff0c;实现不同类型的预测模型&#xff0c;如马尔科夫预测、神经网络预测、模糊预测和灰色预测&#xff0c;需要用到不同的函数和工具箱。下面我将为每种预测模型提供一个基本的示例代码。 二、实现 1. 马尔科夫预测 马尔科夫预测通常用于处理具有无…

四大内存区域揭秘:你真的了解你的程序吗?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好!我是你们的技术小伙伴小米,今天我们来聊聊操作系统中的进程空间。作为一名技术爱好者,我特别兴奋地为大家拆解一下进程空间的四大区域:栈区…

嵌入式实习--MobaXterm连接开发板与SSH远端服务器详细使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前期准备二、安装USB串口模块驱动1.1驱动未自动安装 二、MobaXterm安装使用2.1 MobaXterm 软件安装2.2 MobaXterm 软件使用2.2.1连接开发板2.2.2 远程SSH连…

图论-最小生成树

Prim算法 算法描述 dist[i]<-- for(i 0;i<n;i) t<--找到集合外最近的点 用t更新其他点到集合的距离&#xff08;这个集合就是已经确定的最小生成树的点和边&#xff09; st[t] true; dist[i] <-- 无穷 这一步是初始化所有节点到集合的最小距离为无穷大。dist[i] 表…

科普文:微服务之Spring Cloud 服务调用组件Openfeign

一、概述 Feign是声明式Web服务客户端&#xff0c;它使编写Web服务客户端更加容易。 Feign不做任何请求处理&#xff0c;通过处理注解相关信息生成Request&#xff0c;并对调用返回的数据进行解码&#xff0c;从而实现简化HTTP API的开发。 如果要使用Feign&#xff0c;需要创…

项目相关内容 ----- 2实现打印 ---- 图片与字符

目录 1 . 实现图图片的打印 1&#xff09;结构体定义 2&#xff09;画点线 3&#xff09;清屏 4&#xff09;图片显示 5&#xff09;主函数部分 2 . 实现字符的打印 1) 定义BMP位图文件的头部信息以及信息头​ 2&#xff09;实现打印字符的绘制​ 3 . 打印文本内容​ 附…

你会在Vision Pro里编程吗?

你会在Vision Pro里编程吗&#xff1f; Vision Pro作为一位开发者&#xff0c;你会考虑将Vision Pro应用到编程中吗&#xff1f;你认为Vision Pro有可能改变开发者的工作模式与效率吗&#xff1f; 初见Vision Pro有点陌生&#xff0c;不太了解Vision Pro是什么。那么这里先来了…

顶点着色器片段着色器

/* * FileName : OpenGL_Tutorial.cpp * Time : 2024-08-03 10:00:00 * Author : XuMing * Email : 920972751qq.com * description : 使用OpenGL进行顶点输入和着色器编译的详细解析 */#include <glad/glad.h> #include <GLFW/glfw3.…