1.判断定义为String类型的s1和s2是否相等?

答案解释:String类代表字符串,字符串是常量,常量需要进入到内存中的方法区的常量池(进入常量池规则:如果常量池中没有这个常量,就创建一个,如果有就不再创建了)。所以s1首先会在常量池中创建“abc”对象,“abc”对象是有地址值的,“abc”对象将地址值赋给s1。当s2的时候,此时常量池中已经存在了“abc对象”,所以就不需要再创建了,s2的引用也指向了常量池中的“abc”对象,两个引用指向了同一个对象,s1和s2地址值一样,所以==号比较的时候返回true;String类重写了equals方法,比较的是属性值,s1和s2的属性值都是“abc”,所以是true

2.下面这句话在内存中创建了几个对象?

String s = new String("abc");

答案:2个对象。

解释:s首先会在常量池创建“abc”字符串常量,当new的时候就会在堆内存中创建一个对象,此时会把常量池中的字符串常量拷贝一份副本到给到堆内存中的对象,堆内存中的这个对象就会把地址值赋给s。常量池中对象的地址值和堆内存中对象的地址值是不一样的,s指向的是堆内存中的对象,不是常量池中的对象。此时堆内存中有一个对象,常量池中有一个对象,所以创建了2个对象。查看API,String的有参构造

3.判断定义为String类型的s1和s2是否相等?

答案解释:由题2可知,当执行完s1的时候,内存中会有两个对象,一个在堆内存,一个在常量池,且地址值是不一样的,s1指向的是堆内存中的对象,而当执行到s2的时候,s2指向的是常量池中的对象,地址值不一样,所以==号判断的时候返回false。s1和s2的属性值是一样的,所以equals方法比较时返回true

4.判断定义为String类型的s1和s2是否相等?

答案解释:Java中有常量优化机制,“a”、“b”、“c”本身就是字符串常量,所以在编译时,"a"+"b"+"c"就是“abc”字符串,所以就在常量池创建了“abc”字符串,当执行s2的时候,此时常量池中已经存在了“abc”,所以==号比较返回true。equals方法比较毫无疑问是true。

5.判断定义为String类型的s3和s2是否相等?

答案解释:s1+"c"中s1不是常量,所以不能有常量优化机制来分析。equals方法比较毫无疑问是true。

  1. s1和s2会分别在常量池中创创建"ab"、"abc"两个对象
  2. s3的时候是字符串串联,API解释如下图。所以s3的时候会在对内存中创建StringBuilder(或者StringBuffer)对象,通过append方法拼接成“abc”对象,此时的“abc”是StringBuilder(或者StringBuffer)类型的,通过调用toString方法转成String对象,此时s3指向的是堆内存中这个String对象
  3. s2指向的是常量池中的对象,s3指向的是堆内存中的对象,所以==号比较返回false

判断两个String类型的是s1,s2是否相等?相关推荐

  1. java时间戳类型如何比较大小_JAVA中两个String类型的时间戳怎么样比较大小?

    1.从数据库里面获得的时间戳是String类型的,要与当前时间比较,判断登陆是否过期 生成一long类型的当前时间,把String类型强制转换成long类型报错,代码如下: long currentT ...

  2. java比较时间戳大小_JAVA中两个String类型的时间戳怎么样比较大小?

    1.从数据库里面获得的时间戳是String类型的,要与当前时间比较,判断登陆是否过期 生成一long类型的当前时间,把String类型强制转换成long类型报错,代码如下: long currentT ...

  3. 计算两个String 类型的时间相关几个月

    /*** 返回两个时间段相隔几个月* @param date1* @param date2* @return* @throws ParseException * @throws ParseExcept ...

  4. 用JAVA编写一个Book类_Java编程:创建一个Book类包含两个String类型私有属性name(书名)和publish(...

    展开全部 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public clas ...

  5. 2019-05-21 Java学习日记之String类型Demo

    String类的构造方法: public String():空构造 public String(byte[ ] bytes):把字节数组转成字符串 public String(byte[ ] byte ...

  6. String类型的认识以及编译器优化

    Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = "tao" ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new).所以 ...

  7. Spring MVC控制层的返回类型--String类型与Bean类型

    SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明. 一.测试项目的结构 说明:(jsp的名字没起好) 控制层:UserController.java ...

  8. 判断两个数运算是否越界

    在很多场景中越界是个必不可少需要去判断的问题,算术运算的越界都会导致不可预知的错误和安全漏洞,同时也会出现不可预估的错误,所以越界判断尤为重要.下面程序只经过有限的测试,使用过程中如发生错误请提出修改 ...

  9. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task14. 最长公共前缀
  2. PHP语言Yii框架,Yii框架多语言站点配置方法分析【中文/英文切换站点】
  3. 4.使用pnglib读写png图片
  4. 第二章:Java_基本语法_4 程序流程控制
  5. 光端机与光纤收发器的区别
  6. 前端学习(1184):数据绑定指令
  7. 标星7000+,这个 Python 艺术二维码生成器厉害了!
  8. 工具--常见eclipse配置导入web工程(tomcat容器)步骤
  9. python运行游戏是否需要pygame_用Python和Pygame写游戏-从入门到放弃(1)
  10. [C#]使用Costura.Fody将源DLL合并到目标EXE
  11. Java、LotusScript和JavaScript中的自定义事件编程
  12. Python str函数
  13. 【Java项目-飞翔的小鸟】附源码
  14. MIRACL大数运算库使用手册
  15. echarts自定义地图总结(VUE)
  16. matlab之向数据点添加文本说明函数text
  17. windows 网络远程连接samba,并修改windows默认连接samba端口445到指定端口(支持监听ipv6 及ipv4 IP地址)
  18. 在matlab中怎么限定值域,matlab中如何限定wgn函数的值域
  19. 方舟怎么查看服务器信息,方舟怎么查看登录过的服务器 | 手游网游页游攻略大全...
  20. oracle10g SGA

热门文章

  1. 2016年2月西部数码.wang域名注册量及份额报告
  2. Kubernetes更优雅的监控工具Prometheus Operator
  3. 手把手教你学51单片机-C语言基础
  4. graphql 嵌套查询_了解GraphQL中的查询
  5. MySQL Day05 子查询、函数、MD5加密、SELECT小结
  6. 为什么学编程都建议不要用拼音命名?看知乎大佬的回答!秒懂
  7. 深度学习用于医学预后-第二课第四周1-4节-使用线性和基于树的模型构建风险评估模型
  8. 非计算机专业考计算机三级难吗,经验之谈:怎样通过计算机等级考试三级考试...
  9. 电脑硬盘突然不见了?详细解决方法分享
  10. DXP软件使用快捷键