`
xianglachigen
  • 浏览: 11807 次
社区版块
存档分类
最新评论

黑马程序员——字符串相关

阅读更多

android培训java培训、期待与您交流!

字符串相关(String)
public static void main(String[] args)
{
String s = new String("abc");

String s1 = "abc";

String s2 = new String("abc");

System.out.println(s == s1);

System.out.println(s == s2);

System.out.println(s2 == s1);
}
问题描述:
① 当执行完第6行代码的时候,在内存里生成几个对象,分别是什么,在什么地方。
② 当执行完第8行代码的时候,在内存中共有几个对象,分别是什么,在什么地方。
③ 当执行完第8行代码的时候,在内存中共有几个对象,分别是什么,在什么地方。
④ 当程序执行完后,输出的结果是什么。
解:
① 首先在String Pool里边生成一个对象,值为“abc”,当程序运行到第6行的时候,回到String Pool中查找看看有没有“abc”这个对象,因为String Pool中没有“abc”对象,所以虚拟机会把第6行括号里面的“abc”对象放到String Pool里边,接下来执行new String(“abc”)方法在堆内存中又生成一个内容为“abc”的对象。S指向该堆内存中的对象,所以有两个对象,一个在String Pool中,一个是在堆内存中。
② 当执行完第8行语句的时候,内存中没有生成新的对象。因为当定义一个字符串时,如果使用的是常量值而不是用new的方式定义的时候,java首先还是到String Pool中查找看有没有内容为该常量值的对象存在。因为之前在String Pool中已经生成“abc”对象,就不会再生成了。继而s1的引用会指向String Pool中的“abc”对象。
③ 只要java中有new关键字就会生成新的对象。会在堆内存中又生成一个内容为“abc”的新对象,并且s2引用指向这个对象。
④ 在java中“==”对原生数据数据类型来说比较的是他们的值,而对于引用类型来说永远比较的是他们的地址,也就是说它们是不是指向同一个对象。所以上述的程序返回的都是false;

问题描述2:
如果上述程序后面加上
System.out.println(s == s.intern());
System.out.println(s == s1.intern());
System.out.println(s1.intern() == s2.intern());
运行结果如何?
解:
当s.intern()方法被调用的时候java会到String Pool中检查有没有内容为“abc”这个对象,如果有的话s.intern()方法的返回值就是String Pool中“abc”对象的地址,即s1,因为s和s1指向的不是一个对象,所以第一个返回的是false,同理后两个为true。
问题描述3:
String hello = "hello";
String hel = "hel";
String lo = "lo";

System.out.println(hello == "hel" + "lo");
System.out.println(hello == "hel" + lo);
执行结果如何?
解:
字符串执行“+“操作时,当加号两边都是字面的常量值的时候,java会在String Pool中查找有没有和组合内容相等的对象,如果有的话直接返回该内容的地址,所以第一个输出是true。当加号两边有一个不是字面的常量值时,而是通过引用赋给的值时,java会在堆内存中新生成一个对象,所以第二行输出为false。


---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima
分享到:
评论

相关推荐

    黑马程序员入学Java知识——精华总结

    "黑马程序员入学Java知识——精华总结"这份文档很可能包含了Java编程的基础到进阶的知识点,旨在帮助初学者快速掌握Java的核心概念和技能。 1. **Java基础知识**:Java是一种面向对象的语言,它的基础包括语法、...

    黑马程序员_(适合初学者入门的Java基础视频)

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。...配合"黑马程序员_(适合初学者入门的Java基础视频).txt"文本资料,学习者还可以查阅相关知识点和代码示例,进一步提高学习效率。

    struts2学习笔记黑马程序员

    - **Action返回类型**:设置Action的结果类型为`json`,Struts2会自动将模型对象转化为JSON字符串。 **案例——商品信息查询** 1. **前端操作**:利用jQuery发送AJAX请求,获取商品信息并显示。 2. **服务器端...

    毕向东13字符串01

    在第一部分“黑马程序员_毕向东_Java基础视频教程第13天-01-String(概述).avi”中,讲解了字符串的基础知识。字符串在Java中是不可变的对象,这意味着一旦创建,就不能改变其内容。它们是通过`String`类或`...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day03

    《Hibernate框架开发详解——以黑马程序员2016版讲义和笔记为引导》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更专注于业务逻辑而不是繁琐的数据访问...

    黑马程序员匠心之作 C++教程_第6阶段实战-基于STL泛化编程的演讲比赛资料讲义.rar

    《黑马程序员匠心之作 C++教程_第6阶段实战-基于STL泛化编程的演讲比赛资料讲义》是一份专为C++初学者设计的教程资料,由知名的黑马程序员团队精心制作。这份教程以STL(Standard Template Library,标准模板库)为...

    毕向东静态06

    在"黑马程序员_毕向东_Java基础视频教程第06天-09-面向对象(单例设计模式).avi" 这个文件中,毕向东老师可能会详细讲解以下内容: 1. **字符串基础**: - 字符串对象的创建:通过`new String()`或字面量`"abc"`。 ...

    C语言写的打字程序(有源码)

    4. **字符串处理**:处理用户输入的字符和文本,可能用到strlen、strcpy、strcmp等函数。 5. **用户输入处理**:通过标准输入(stdin)获取用户的键盘输入,可能用到getchar或scanf函数。 6. **时间处理**:计时器用于...

    Android 基础教程 第三版 PDF 含源码

    书中解释了如何正确使用XML资源文件,包括字符串、颜色、尺寸和图像等,以及如何在代码中动态访问这些资源。同时,详细阐述了AndroidManifest.xml文件的作用,特别是在申请和处理运行时权限方面。 在数据存储方面,...

    Python快速编程入门的课后习题答案(本人原创,通过测试完整准确)

    Python 的数据类型包括整数、浮点数、字符串、列表、元组、字典等。 Python 的运算符包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 Python 的控制结构包括顺序结构、选择结构、循环结构等。 Python 的...

    手机卫士 黑马

    这款名为“黑马”的手机卫士,是根据某知名教育机构——黑马程序员的教程编写的,非常适合Android开发的初学者进行学习和实践。 在Android 4.2平台上,这款手机卫士应用展示了基础的安全防护功能,如应用程序管理、...

    利用爬虫爬取简单页码类网页数据

    通常会包含`User-Agent`字段,示例中使用了Chrome浏览器的一个典型User-Agent字符串。 7. **数据爬取步骤**: - **循环遍历页码**:使用`for`循环,范围从1到4,表示爬取前四页的数据。 - **构造URL**:根据页码...

    Python学习 | 一个JAVA程序员两天的Python入门笔记

    文章目录vlog正文入门基础注释算数运算符及优先级程序执行原理变量概念和定义方式变量的命名变量的输入和输出数据类型数值型非数值型列表元组列表与元组的互相转换字典字符串在Python中所有非数字型变量都支持的特点...

    阶段三:JavaScript 网页编程资料.zip

    标签“黑马”可能指的是知名的在线教育平台——黑马程序员,而“前端”和“源码”则暗示了这些资料主要关注JavaScript在网页制作中的实际应用和代码实践。 在这个阶段的学习中,你可能会接触到以下关键知识点: 1....

Global site tag (gtag.js) - Google Analytics