_包装类String类分析_第1页
_包装类String类分析_第2页
_包装类String类分析_第3页
_包装类String类分析_第4页
_包装类String类分析_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、包装类包装类String类类ID:WPJ-Java Program BasicWepull Information Service目标目标 掌握包装类掌握包装类 掌握掌握String 和和 StringBuffer 类类 运用运用Math类的方法类的方法Wepull Information S num1 = 5;Integer num = new Integer(num1);int num2 = Value();.包装类包装类 int a = 10;原始数据类型原始数据类型使用原始数据类型声明的变量视为对象视为对象原始数据类型包装类Java.lang 提供We

2、pull Information Service内存划分内存划分 假如有两变量假如有两变量: int a = 10; Integer b = new Integer(10);他他们的内存表示如下图所示:们的内存表示如下图所示: 如图所示如图所示:基本数据类型变量只在栈中分配一块内存,而包基本数据类型变量只在栈中分配一块内存,而包装类在栈和堆中各占一块。装类在栈和堆中各占一块。 JAVA语言是面向对象的语言,但它不是所有的设计思想都语言是面向对象的语言,但它不是所有的设计思想都符合面向对象的,这里大家要知道符合面向对象的,这里大家要知道java不符合面向对象的两不符合面向对象的两个地方个地方:一

3、个是一个是JAVA保留了保留了8个基本数据类型,他们不是对个基本数据类型,他们不是对象,更没有属性和方法;另一个就是象,更没有属性和方法;另一个就是JAVA中存在着中存在着main方方法。法。a=10b=ox33dfox33df:b=10Wepull Information Service包装类意义包装类意义包装类可以完成基本数据类型所有的功能,如数数据存储,并且他们包装类可以完成基本数据类型所有的功能,如数数据存储,并且他们是类,拥有属性和方法,也就是有自己的新功能,那有些同学就会想是类,拥有属性和方法,也就是有自己的新功能,那有些同学就会想,既然有更强大的包装类,既然有更强大的包装类,SU

4、N为什么还要保留那八个不是对象的基为什么还要保留那八个不是对象的基本数据类型呢?这设计到效率与需求的问题。本数据类型呢?这设计到效率与需求的问题。上课经常给学生讲这个例子,比如你家有爷爷奶奶父母你五口人,现上课经常给学生讲这个例子,比如你家有爷爷奶奶父母你五口人,现在需要每人配备一部手机。市面上的手机有两种:便宜的只能通话的在需要每人配备一部手机。市面上的手机有两种:便宜的只能通话的手机,昂贵的功能齐全的智能手机。一般的话我们会根据需求来购买手机,昂贵的功能齐全的智能手机。一般的话我们会根据需求来购买,爷爷奶奶没什么要求买个普通的就行,您要上网要拍照视频要显摆,爷爷奶奶没什么要求买个普通的就行

5、,您要上网要拍照视频要显摆那就买个智能手机吧那就买个智能手机吧。Java中也是一样,上面我们知道,包装类分配两块内存空间,存放具中也是一样,上面我们知道,包装类分配两块内存空间,存放具体数值的数据在堆中,而堆内存的分配比较占用系统资源,而且使用体数值的数据在堆中,而堆内存的分配比较占用系统资源,而且使用完毕后需要垃圾回收车回收,而我们平时在程序中要大量使用如数字完毕后需要垃圾回收车回收,而我们平时在程序中要大量使用如数字这些变量,他们只做简单的存储,完全没必要使用包装类,那这样不这些变量,他们只做简单的存储,完全没必要使用包装类,那这样不如保留基本数据类型,它在完成功能的同时又不会占用过多的资

6、源,如保留基本数据类型,它在完成功能的同时又不会占用过多的资源, SUN也是基于这样的考虑保留了也是基于这样的考虑保留了JAVA中的基本数据类型。中的基本数据类型。Wepull Information Service包装类包装类 java中中,提倡万物接对象,但这样会有个矛盾。数据类型分提倡万物接对象,但这样会有个矛盾。数据类型分为基本数据类型和引用数据类型,那基本数据类型是类吗?为基本数据类型和引用数据类型,那基本数据类型是类吗?Wepull Information ServiceNumber 类的定义类的定义Number类是一个抽象类,主要是将数组包装类中内容变为基本数据类类是一个抽象类,

7、主要是将数组包装类中内容变为基本数据类型,主要操作方法如下:型,主要操作方法如下:(是包装类的父类是包装类的父类)Wepull Information Service拆箱与装箱拆箱与装箱 装箱操作:将基本数据类型转换为包装类。装箱操作:将基本数据类型转换为包装类。 拆箱操作:将包装类转换为基本数据类型。拆箱操作:将包装类转换为基本数据类型。 其实,其实,JDK自从自从1.5(5.0)版本以后,就引入了自动拆装箱的语版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。统

8、将自动进行,这将大大方便程序员的代码书写。int i = 10 ;Integer i2 = new Integer(i) ;/ 装箱操作int j = Value() ; / 拆箱操作System.out.println(j * j) ; int m = 12; Integer in = m; / 自动装箱 int n = in;/Integer /自动拆箱Wepull Information Service包装类的使用包装类的使用 对于包装类说,这些类的用途主要包含两种对于包装类说,这些类的用途主要包含两种 作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。作为和基本数据

9、类型对应的类类型存在,方便涉及到对象的操作。 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。的操作方法。Wepull Information Service 字符串字符串- 基本数据类型基本数据类型 基本数据类型基本数据类型 -字符串字符串 Integer类类(字符串转字符串转int型型) public static int parseInt(String s) thows NumberFormatException Float类类(字符串转字符串转float型型) public static float par

10、sonFloat(String s) thows NumberFormatException toString 方法,以字符串的形式返回包装类对象所表示的基方法,以字符串的形式返回包装类对象所表示的基本数据类型。本数据类型。包装类的常用操作方法包装类的常用操作方法String a = 222;int aa = Integer.parseInt(a);float bb = Float.parseFloat(a);Wepull Information ServiceCharacter 基本数据类型基本数据类型包装类包装类 isDigit()确定字符是否为确定字符是否为0 至至9 之间的数字之间的数

11、字 isLetter()确定字符是否为字母确定字符是否为字母 isLowerCase() 确定字符是否为小写形式确定字符是否为小写形式 isUpperCase()确定字符是否为大写形式确定字符是否为大写形式Wepull Information ServiceString 类类String 类类字符串字面量对象未修改的原始字符串 可以更改字符串版本 原始字符串保持不变Wepull Information Service String类类 String对象代表一组不可改变的对象代表一组不可改变的Unicode字符序列字符序列 String方法方法: 它的方法可用来创造新的字符串:它的方法可用来创造

12、新的字符串:concat、replace、substring、toLowerCase、toUpperCase和和trim。 查找字符的方法:查找字符的方法:endWith、startWith、 indexOf、 lastIndexOf。 比较字符的方法:比较字符的方法:equals、equalsIgnoreCase、compareTo。 其它:其它:charAt、length(), getBytes() ,contains 定义字符串数组定义字符串数组Wepull Information ServiceString 类的构造方法类的构造方法Wepull Information Service练

13、习练习String类构造方法类构造方法 根据下面代码练习根据下面代码练习 char c = s, u, n, , j, a , v, a ; String s4 = new String (c); String s5 = new String (c,4,4); 提示提示:一个字符串实际上就是一个字符串实际上就是String的匿名对象,可以直接的匿名对象,可以直接调用调用String类的所有方法。类的所有方法。Wepull Information Service字符串字符串创建创建public class Equality public static void main(String args)

14、 String s1 = new String(“abc); String s2 = new String(“abc); String s3 = “abc; String s4 = s3; System.out.println(s1=s2); System.out.println(s3=s4); System.out.println(s1.equals(s2)字符串比较运算符的用法字符串比较运算符的用法使用使用 String 类的方法,如类的方法,如 equals() 和和 = 运算符运算符 new String(“abc),每次都在堆内存中开辟块内存空间,每次都在堆内存中开辟块内存空间,St

15、ring s3 = “abc会在字符串池中保存内存,如果以后在声明字符串时,如果发现会在字符串池中保存内存,如果以后在声明字符串时,如果发现内容一样,则不再重复开辟内存空间,而是从内存池中,取出,继续使内容一样,则不再重复开辟内存空间,而是从内存池中,取出,继续使用。用。Wepull Information ServiceString str = abc与与String str = new String(abc) 关于关于String str = abc的内部工作。的内部工作。Java内部将此语句转内部将此语句转化为以下几个步骤:化为以下几个步骤: (1)先定义一个名为先定义一个名为str的对

16、的对String类的对象引用变量:类的对象引用变量:String str; (2)然后通过符号引用去字符串常量池然后通过符号引用去字符串常量池 里找有没有里找有没有abc, 如果没如果没有,则将有,则将abc存放进字符串常量池存放进字符串常量池 ,并令,并令str指向指向”abc” (3)如果已经有如果已经有”abc” 则直接令则直接令str指向指向“abc”。 比较:比较: String str = abc,在内存中在内存中 其实只存在一个对象而已其实只存在一个对象而已. 这种写法有这种写法有利与节省内存空间利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,同时它可以在一定程度上

17、提高程序的运行速度,因为因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于对象。而对于String str = new String(abc);的代码,则一概在;的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。对象,从而加重了程序的负担。Wepull Information Service字符串比较字符串比较字符串 1字符串 2字符串字符串 1字符串字符串 2由 equals() 方法确定检查组成字符串内容的字符

18、同一个对象用 = 运算符检查检查字符串是否指向同一个或不同的对象Wepull Information Service字符串比较字符串比较 Wepull Information Service提取字符串提取字符串Wepull Information Service 修改字符串修改字符串public String replace(char oldChar,char newChar)该方法用字符该方法用字符newChar替换当前字符串中所有的字符替换当前字符串中所有的字符oldChar,并返回一个新的字,并返回一个新的字符串。符串。public String replaceFirst(String

19、regex, String replacement)该方法该方法用字符串用字符串replacement的内容替换当前字符串中遇到的第一个和字符的内容替换当前字符串中遇到的第一个和字符串串regex相一致的子串,并将产生的新字符串返回。相一致的子串,并将产生的新字符串返回。public String replaceAll(String regex, String replacement)=该方法该方法用字符串用字符串replacement的内容替换当前字符串中遇到的所有和字符串的内容替换当前字符串中遇到的所有和字符串regex相一致的子串,并将产生的新字符串返回。相一致的子串,并将产生的新字符串

20、返回。Wepull Information Service关于关于length()方法方法 length():求字符串长度。比如完成一个注册的功能,规定:求字符串长度。比如完成一个注册的功能,规定用户密码必须是用户密码必须是8 到到16位之间,这样这个方法就可以派上用位之间,这样这个方法就可以派上用场。场。 String pwd = maolaoshipwd ; System.out.println(pwd 的长度是的长度是 + pwd.length(); 注意跟数组的注意跟数组的:length属性之间的区别。属性之间的区别。Wepull Information Servicetrim() 去

21、掉字符串两边的空格。(注意此方法并不能去掉中间的空去掉字符串两边的空格。(注意此方法并不能去掉中间的空格,如何去掉中间空格,我们下面还有方法)。格,如何去掉中间空格,我们下面还有方法)。 String pwd = maolao shipwd ; System.out.println(pwd 去掉两边空格的长度是去掉两边空格的长度是 + pwd.trim().length(); Wepull Information ServicetoLowerCase() toUpperCase() 把字符串全部转换为大写或小写。我们登录有些系统用户密把字符串全部转换为大写或小写。我们登录有些系统用户密码是不区

22、分的大小写的,而码是不区分的大小写的,而java语言是区分大小写的,即语言是区分大小写的,即wang与与WANG是两个不同的数值,所以我们可以把它全部是两个不同的数值,所以我们可以把它全部转换为大写或小写比较。转换为大写或小写比较。Wepull Information Servicesubstring(int a, int b) 从从a 开始截取开始截取(b- a)个字符(注意有的语言是从个字符(注意有的语言是从a 开始截取开始截取b 个字符,比如个字符,比如C#中中, 而而javaScript提供了两个函数提供了两个函数subStr与与subString )。)。 String msg =

23、my name is maolaoshi; System.out.println(从第从第 5的位置截取的位置截取4的字符是的字符是 + msg.substring(5, 9); 技巧技巧:包头不包尾包头不包尾 提示提示:常用方法常用方法Wepull Information ServiceindexOf(String target ) 查找查找target在字符串中第一次出现的位置,注意下标是从在字符串中第一次出现的位置,注意下标是从0开始,如没出现返回开始,如没出现返回- 1 。比如我们验证用户输入的电子邮。比如我们验证用户输入的电子邮件地址是否正确,电子邮件中一定有件地址是否正确,电子邮件

24、中一定有 字符与字符与. 字符,而且字符,而且 出现的位置应该在出现的位置应该在. 的前面,就可以使用此方法的前面,就可以使用此方法: String msg = my name is maolaoshi; System.out.println(字符串字符串 a在在msg中第一次出现的位置是中第一次出现的位置是 + msg.indexOf( a); String email = ; if (email.indexOf( ) email.in dexOf(. ) & email.indexOf( ) != -1 ) System. out.println(email + 是合法的邮件地址是

25、合法的邮件地址); else System. out.println(email + 不是合法的邮件地址不是合法的邮件地址); Wepull Information ServiceindexOf(int a, String target) 从从a 的位置开始,查找的位置开始,查找target在字符串中第一次出现的位置在字符串中第一次出现的位置,注意下标是从,注意下标是从0 开始,如没出现返回开始,如没出现返回- 1 ; String msg = my name is maolaoshi; System.out.println(从下标从下标 5开始开始,a第一次出现的位置是第一次出现的位置是 +

26、 msg.indexOf( a, 5); Wepull Information ServicelastIndexOf(String target ) 查找查找target在字符串中最后一次出现的位置,如没出现返在字符串中最后一次出现的位置,如没出现返回回- 1 。 String msg = my name is maolaoshi; System. out.println(a最后一次出现的位置是最后一次出现的位置是 + msg.lastIndexOf( a);Wepull Information ServicecharAt( int a ) 返回字符串返回字符串a 位置的字符,如果越界位置的字

27、符,如果越界则则报报java.lang.StringIndexOutOfBoundsException异常。异常。 String msg = my name is maolaoshi; System.out.println(5位置的字符是位置的字符是 + msg.charAt(5); System.out.println(50位置的字符是位置的字符是 + msg.charAt(50); Wepull Information Servicereplace (String a, String b) 把字符串中的把字符串中的a 替换为替换为b 。返回新的字符串。返回新的字符串。 String msg

28、 = my name is maolaoshi; System.out.println(a替换为替换为*: + msg.replace( a , *);Wepull Information Servicerplit(String a) rplit(String a) :把字符串按照其中出现的字符:把字符串按照其中出现的字符a 拆分为一拆分为一个个字符字符数组数组。返回值即使数组。返回值即使数组。 String msg = my name is maolaoshi; String arr = msg.split(a); System.out.println(拆分后的数据长度为拆分后的数据长度为

29、+ arr.length ); for (String string : arr) System. out.println(string); Wepull Information Service工作的项目代码中经常要做字符串的拼接工作的项目代码中经常要做字符串的拼接String msg = “ 犀利哥与犀利哥与”; if( 凤姐在凤姐在) msg +=”凤姐凤姐”; if( 芙蓉姐姐在芙蓉姐姐在) msg +=”芙蓉姐姐芙蓉姐姐”; msg += “去春游去春游”; System.out.println(msg); 凤姐芙蓉姐姐都在凤姐芙蓉姐姐都在。则内存划分为。则内存划分为:Wepull I

30、nformation Service内存划分内存划分msg:0 x250 x22:犀利哥与0 x23:犀利哥与 凤姐0 x24:犀利哥与 凤姐 芙蓉姐姐0 x25:犀利哥与 凤姐 芙蓉姐姐 去郊游这里当这里当msg的数值发生改变时,的数值发生改变时,JVM 每次都会给每次都会给msg 分配一块新的内存分配一块新的内存空间,那最后上面的空间,那最后上面的0 x22到到0 x24就会变为垃圾内存等待回收造成浪费,就会变为垃圾内存等待回收造成浪费,并且在堆中分配收集内存是很占系统资源的,所以这样的写法虽然不会并且在堆中分配收集内存是很占系统资源的,所以这样的写法虽然不会报错,但显然不是理想的报错,但

31、显然不是理想的。Java中为我们提供了中为我们提供了StringBuffer类解决这个问题类解决这个问题!Wepull Information ServiceString不变性不变性String类类创建后直接修改直接修改不变性的概念解决方法解决方法StringBuffer 类String 的对等类表示可增加和可编写字符的可变序列将字符插入到字符串中间或附加到字符串末尾Wepull Information ServiceStringBuffer 用于表示可以修改的字符串用于表示可以修改的字符串使用连接运算符使用连接运算符 (+) 的字符串会自动创建字符串缓冲对象的字符串会自动创建字符串缓冲对象构造函数构造函数:StringBuffer 类类Wepull Information ServiceStringBuffer 类类Wepull Information Service字符串拼接字符串拼接 StringBuffer msg = new StringBuffer(“犀利哥与犀利哥与”); if( 凤姐在凤姐在) msg.append(” 凤姐凤姐”); if( 芙蓉姐姐在芙蓉姐姐在) msg.append(” 芙蓉姐姐芙蓉姐姐”)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论