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. Python 基础篇:介绍
  2. MyBatis 批量更新,批量更新
  3. IE下iframe跨域session和cookie失效问题的解决方案
  4. css3实现科技感的呼吸灯效果
  5. Android-循环访问网站App
  6. 大型企业网络设备管理
  7. matplotlib画图_Python数据可视化工具Matplotlib之画图(四)(饼状图)
  8. w10计算机名重新启动此计算机后,win10电脑关机后自动重启怎么回事?原因与解决办法...
  9. Python 命名规范
  10. openlayer制作专题图
  11. shell 判断字符串长度
  12. 通俗易懂理解几何光学(二)共轴球面系统与理想光学系统
  13. linux搜索log文件的内容
  14. 平稳性检验和白噪声检验
  15. flask_pagedown小修改
  16. 2019-10-16 博客热门文章
  17. 【论文笔记】面向智能假肢手臂的生机接口系统与类神经协同控制
  18. html经典网页,经典网页设计:20个与众不同的国外HTML5网站_html/css_WEB-ITnose
  19. 如何利用ArcGIS绘制国界线/省界线
  20. 使用Jlayer和AudioTrack实现在线流媒体边下边播功能

热门文章

  1. AMD completes ATI acquisition
  2. JavaScript学习笔记 06、DOM元素—③定时器与延时器
  3. matplotlib报Unknown symbol: \rule, found ‘\‘ (at char 42), (line:1, col:43)
  4. 物联网是什么?物联网应用场景有哪些?物联网有什么好处?
  5. Hive_处理NULL的几个函数 NVL, COALESCE, NULLIF
  6. OPUS进行音频编码与解码
  7. 图论期末复习(《图论机器应用》——朴月华)
  8. TaskView简述
  9. 希望计算机专业都知道这些优质比赛
  10. 背景设置为透明RGB