




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程名称:String 对象的两种实例化方式 2、知识点 2.1、上次 课程的主要知识点 数组 2.2、本次 预计讲解的知识点 1、String 类的两种实例化方式的区别; 2、String 类对象的比较; 3、String 对象的使用分析; 3、具体内容( ) 3.1、String 类的两种实例方式 String 并不是一个基本数据类型,它本身属于一个 类, 但是 这个类在设计的过程之中加入了 一些 java 自己的特殊支持。所以对于这类对象实例化方式就有两种形式: 直接赋值:String 对象 = “内容”; 构造方法:public String(String s); 范例:使用直接赋值 public class StringDemo public static void main(String args) String str = “Hello“; str = str + “World“; System.out.println(str); 范例:利用构造方法 public class StringDemo public static void main(String args) String str = new String(“Hello“); str = str + “World“; System.out.println(str); 至少现在通过执行结果来讲,String 类的两种实例化方式都是 可用的。 3.2、String 的相等比较 如果现在有两个 int 型的变量,那么要进行相等的判断,则直接使用”=”即可; 范例:两个 int 比较 public class StringDemo public static void main(String args) int x = 10;/直接 赋值 int y =10; /直接赋值 System.out.println(x=y);/true 发现两个利用直接赋值实现的程序,那么使用”=” 的时 候可以进行正常的进行相等判断。 但是如果现在将同样的的操作形式用在 string 上呢? 范例:观察 string 的比较 public class StringDemo public static void main(String args) String stra = “hello“; String strb = new String(“hello“); String strc = strb; /引用传递 System.out.println(stra=strb);/false System.out.println(strb=strc);/true System.out.println(stra=strc);/false 通过现在的执行可以发现一个非常严重的问题,此时字符串的内容实际上都是相同的,而 在使用”=” 比 较之后我们发现有的比较结果是 false,那么为什么呢? 所以如果在程序中如果使用“=” 比较的只是两个对象(任意的引用类型)堆内存地址数值 , 属于数值内容的比较,并不是堆内存保存内容的比较,那么要想进行 string 对象内容的比较 则可以利用 string 类中提供的方法来完成 : 字符串比较(暂时将此方法进行修改)public Boolean equals (String str); 范例:利用 equals()实现字符串内容的比较。 public class StringDemo public static void main(String args) String stra = “hello“; String strb = new String(“hello“); String strc = strb; /引用传递 System.out.println(stra.equals(strb);/true System.out.println(strb.equals(strc);/true System.out.println(stra.equals(strc);/true 由于内容是可控因素,而地址是不可控因素,所以在日后开发之中,只要是字符串的比较都 使用.equals()方法来完成,绝对不可能出现”=”。 面试题:请解释在 string 比较 中”=” 与 equals()的区别? “=”:是 java 本身提供的关系运算符,可以进行数值比较,如果用在 String 上表示对 象内存地址数值比较。 “equals()”:是 String 类自己定 义的方法,用于字符串内容的比 较。 3.3、String 匿名对象 任何的编程语言都不会提供有字符串这一数据类型。字符串的描述在很多语言之中都使用 字符数组表示。而 java 的设计之初为了解决这样的一个问题,专门提供了一个 Sting 类来进 行描述。但是随着发展,为了能够让程序变得更加的好易于开发,所以在 java 里面也提供双 引号的声明的数据,而这些数据,在 java 中并不是普通的变量,而属于 String 类的匿名对象。 范例:验证匿名对象 public class StringDemo public static void main(String args) String str = “hello“; System.out.println(“hello“.equals(str); 现 在发现,此时已经可以通 过字符串调用 equals()方法,那么就证明一点,字符串的确是 String 类的匿名对象。那么之前的”String 字符串对象 =”字符串”;”,本质就是为一个字符串 的匿名对象起了一个名字。 微有作用的经验分享: 如果现在假设你的开发有这样一种需求:用户输入 一些指令,而后根据输入指令判断要 执 行的操作。那么此时就存有两种做法: 做法一:利用 String 变量调用 equals()方法 public class StringDemo public static void main(String args) String input =“run“;/假设为输入数据 if(input.equals(“run“) System.out.println(“*系统开始运转*“) 但是,既然 input 的内容是由用 户输入的,那么就有可能不输入。如果不输入内容就有能为 null,则 null 调用 equals()这个方法就有能出现错误(NullPointerException)。 做法二:反过来写 public class StringDemo public static void main(String args) String input =null;/假设为输入数据 if(“run“.equals(input) System.out.println(“*系统开始运转*“); 首先字符串的匿名对象永远不可能是 null,并且在 equals()方法里面支持有 null 的验证,所 以如果发现要比较的内容为 null 返回的 就是 false. 字符串常量 = String 类的匿名对象。 比较字符串内容是否相同时,将常量写在前面。 3.4、String 类两种实例化对象的区别(核心) 声明: 在开发之中如果发现,有多种方式可以实现同一结果,那么就有可能出现面试题。 此时对 于 String 类的实例方式出 现两种,那么 这两种方式到底该使用那一种,以及每种方 式的区别是什么呢? 分析一:分析 String 类对象直接实例化的 形式 直接赋值是现在为此看见最多的: String str=”hello”; public class StringDemo public static void main(String args) String str = “hello“; System.out.println(str); 开辟一块堆内存空间,并且一个栈内存将直接指向该堆内存空间。 范例:继续观察直接赋值 public class StringDemo public static void main(String args) String stra = “hello“; String strb = “hello“; String strc = “nihao“; System.out.println(stra=strb);/true System.out.println(stra=strc);/false System.out.println(strb=strc);/fasle 本程序的内存关系图如下: 解释:关于对象池的概念(Object Pool) 在 java 设计过程之中为了方便用户的代码编写开发,针对于几个特殊的类使用了共享设计 的思路,其中 String 就属于这其中的一员 。这种 设计思路是 java 自己的支持,而且只针对 直接赋值的情况。 在使用直接赋值实例化 String 类对象操作之中,字符串的内容定义之后实例上会自动将其 保存在一 个对象池之中,而后如果 现在有其 他的字符串对象也采用了直接赋值的形式,并 且内容与之前的字符串内容完全相同,那么不会开辟新的堆内存空间,而是通过对象池找 到已有的堆内存空间地址,直接引用即可,所以就会造成若干个字符串直接赋值之后,当内 容相同时,地址是完全相同的,所以 ”=”的结果也是相同的,这样的设计就是共享设计模式, 分析二:利用构造方法实例化对象 还是以下面的程序为分析依据: public class StringDemo public static void main(String args) String str = new String(“hello“); System.out.println(str); 看内存关系。 通过此时的内存分析可以发现 ,如果采用了构造方法 进行 string 类对象的实例化操作,那 么最终将产生两块堆内存,其中有一块是垃圾空间。 如果现在使用了构造方法进行 string 类对象实例化还会 牵扯到入池的问题, 范例:没入池 public class StringDemo public static void main(String args) String stra = new String(“hello“);/构造方法 String strb = “hello“;/直接赋值 System.out.println(stra=strb);/false 现在的代码之中,发现如果使用构造方法进行 String 类对象实例化,那么所 产生的对象不会 保存在对象池之中,也就是说此对象无法重用。 如果现在用户需要让这个对象入池,则只能通地手工的方式完成: 手工入池:public String interm(). 范例:手工入池 public class StringDemo public static void main(String args) String stra = new String(“hello“).intern();/构造方法 String strb = “hello“;/直接赋值 System.out.println(stra=strb);/true 面试题:请解释 string 类两种 对象的 实例化区别? 直接赋值(String str= “字符串”;) :只会开辟 一块堆内存空间,并且对象可以自动入 池以供其它对象重复使用。 构造方法(string str = new String(“字符串”):会开辟两块堆内存空间,并且有一块 堆内存将成为垃圾,同时产生的实例化对象不会直接入池,需要 intern()方法手工 入池。 3.5、字符串声明 则不可改变 好像之前学习过一个”+”,利用这一概念可以实现字符串改 变。 范例:分析一下代码 public class StringDemo public static void main(String args) String str = “Hello “; str +=“World“; str = str+“!“; System.out.println(str);/HelloWorld! 于是就根据以上的程序来进行内存分析。 可以发现整个操作流程之中,都是 String 类对象的 引用发生着改变,而字符串的内容没有 改变,这样操作会形成垃圾,正因为如此,所以在 实际开 发中,以下的操作禁止出现。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 激光技术工程师知识结构分析
- 大班国语测试题及答案
- 艺考表情术语试题及答案
- 2025-2030婴童服饰市场行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030婴儿用品产品入市调查研究报告
- 北师大版2025年五年级数学下学期期中质量评估检测
- 2025-2030多功能电饭煲市场行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030塑胶家具行业市场现状供需分析及投资评估规划分析研究报告
- 2025年黑龙江省安全员A证考试题库
- 2025-2030国内钛白粉行业市场发展分析及竞争格局与投资机会研究报告
- 医院保安员培训
- 依法执业与医疗安全培训课件
- 2024年宁波市消防救援支队社会招录政府专职消防员笔试真题
- Unit 6 Beautiful landscapes Reading 教学设计-2024-2025学年译林版七年级英语下册
- 神经导航在神经外科手术中的应用与经验
- 2024-2025学年湖南省邵阳市新邵县第二中学高二上学期期中考试英语试卷
- 学习通《形势与政策》2025春章节测试答案
- 外研版(2025版)七年级下册英语Unit 1~3+期中共4套测试卷(含答案)
- 消防员战斗服装和设备介绍
- 网球场翻新施工方案
- 2025年四川省国有资产经营投资管理有限责任公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论