String s1 = new String("hello");
String s2 = "hello";
System.out.println(s1 == s2);//false
System.out.pringln(s1.equals(s2));//true

对于String s1 = new String("hello"),

  1. 首先在堆内存中申请内存存储String类型的对象,地址值赋给引用 s1;
  2. 在方法区的常量池中找,有无hello:
    1. 没有,就在常量池中开辟空间存储hello,并将该空间的地址值赋给堆中存储对象的空间
    2. 有,就直接将hello所在空间的地址值给堆中存储对象的空间

对于String s2 = "hello",

  1. 由于上述过程,常量池中已经存储了一个hello,此时只需要将hello所在空间的地址值赋给引用 s2;

综上,s1存储的是堆内存中的地址值,s2存储的是常量池中的地址值,所以s1 == s2为false;又由于String类的equals方法重写了toString,比较的是两个字符串的内容,故结果为true。

回顾:

==,比较运算符,可以比较基本类型,也可以比较引用类型。

  1. 比较基本类型时,比较的是值是否相同
  2. 比较引用类型时,比较的是地址值是否相同

equals方法,是Object类中的方法,只能比较引用类型

  1. 没有重写时,比较的是地址值
  2. 重写后,一般比较的是引用所指的对象的内容

String s1 = new String(hello); String s2 = hello;的区别相关推荐

  1. java中string类相等_Java中String类的常见面试题

    第一题:==与equals()的区别 1.判断定义为String类型的s1和s2是否相等 String s1 = "abc"; String s2 = "abc" ...

  2. python string转date类型_java string类型怎么转化成date类型

    /** * 根据一段日期时间字符串,转换得到日期时间对象.日期时间字符串可以是以下格式: * 1. yyyy-MM * 2. yyyy-MM-dd * 3. HH:mm * 4. HH:mm:ss * ...

  3. string教程c语言,C++ string类详解

    C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类.string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针. string ...

  4. java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...

    这是以前刚学Java那会经常被问到的问题,并且也会经常出现在面试中.这个问题不仅仅只局限于Java,可以适用于其他大部分语言,正好最近有个小朋友在学编程,特此整理一下. String s1 = &qu ...

  5. String s1==s2面试题

    这个程序运行的结果是什么? class StringTest1{public static void main(String[] args) {String s1="equal"; ...

  6. 判断字符串s1中是否包含s2字符串c语言,C语言:找出s1中是否存在字符串s2(C language: find out if string s2 exists in s1)...

    C语言:找出s1中是否存在字符串s2(C language: find out if string s2 exists in s1) 是否有任何C函数来检查s1中是否存在字符串s2? s1: &quo ...

  7. String s=“abc“ 和 String s1=new String(“abc“)和String s2=new String(“abc“)之间的关系

    这篇文章针对困扰新手初学java基础时常遇到的难以理解的一个问题!!! ==∶它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较 ...

  8. String s1=new String(“abc“); 和String s1=“abc“区别

    在讨论他们的区别时,我们要知道java中的内存,主要分为堆和栈.栈中一般存放的是java中的基本数据变量 比如 int,double,float 还存放了对象的引用变量 如 Person person ...

  9. java string类方法_Java基础学习——String类及其方法

    String类概述 该类被final修饰,无子类,不可被复写.创建的对象一旦初始化,其内容不可被改变. String类复写了Object类中的equals()定义了自己的独特内容,该方法用于判断字符串 ...

最新文章

  1. 关于CSS 3 及浏览器兼容性问题
  2. linux ip add address,linux – ip地址范围参数
  3. n1进入recovery模式_启动自动变砖模式?三星Galaxy“智能”手机
  4. IPK僵尸网络 看看其传播手法
  5. 【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )
  6. jQuery笔记总结篇
  7. 弱电工程室内外光纤敷设有哪些技术要求
  8. MAC 压测工具Webbench
  9. python3.6是用来干嘛的_学 Python 都用来干嘛的?
  10. vi定位到第一行,最后一行和任意行
  11. matlab可视化大学物理学_传输矩阵法在大学物理波动光学教学中的应用
  12. [oc学习日记]代理模式
  13. 2016年大数据Spark“蘑菇云”行动之spark streaming消费flume采集的kafka数据Directf方式...
  14. 全网首发:JDK绘制文字:八、绘制函数简要分析
  15. 恒温箱温度计算机控制系统仿真,实验用恒温箱控制系统设计及其模型建立
  16. 金蝶KIS应用虚拟化集成解决方案
  17. comsol移动网格_COMSOL动网格调试
  18. FME模板兴趣班第二期任务小结
  19. Mac电脑下载软件的几个网站
  20. 5种录制Windows 10 音频的方法

热门文章

  1. 位、比特、字节和字之间的关系
  2. windows+vscode搭建远程linux开发环境
  3. MySQL中表视图使用操作详解
  4. Oracle数据库如何创建视图【示例演示】
  5. Python如何读取Excel表内容
  6. 训练神经网络用什么显卡,cpu可以训练神经网络吗
  7. UVM_MAX_QUIT_COUNT
  8. 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围
  9. matlab deconv出现无穷大,【 MATLAB 】deconv 函数介绍
  10. 精简Windows Defender,关闭superfetch