"=="比较的是两个字符串的内存地址。  "equals"比较的是两个字符串的实际值。

例子1.

String s1="abc";
String s2="abc";
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}

此时输出:两个字符串值相等

     两个字符串指向同一个内存地址

why:当给s2赋值abc时,s2会自动去寻找有没有abc这个值得字符串。如果有,会copy  s1(包含内存地址)。如果没有,再创建一个新内存地址。

例子2.

String s1="abc";
String s2=new String("abc")
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}

此时输出:两个字符串值相等

why:s2创建了一个新对象,值为abc,与s1不再是同一个内存地址,所以只输出:两个字符串相等

例子3.

String s1="abc";
String s2=new String()
s2="abc";
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}

此时输出:两个字符串值相等

     两个字符串指向同一个内存地址

why: 虽然new了一个新对象,但没有在此时给值,后来赋值的时候,仍是copy 了s1的内存地址。

例子4.

String s1="abc";
String s2=new String("abc");
s2=s2.intern();
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}

此时输出:两个字符串值相等

      两个字符串指向同一个内存地址

why: 调用了intern()方法,此时s2先去找有没有abc,如果有,copy 内存地址,如果没有,创建新的。

String类型中"=="和"equals"的区别的更多相关文章

  1. 关于String类型中==和equals的区别。

    "=="操作符的作用 1.用于基本数据类型的比较,比较的是值. 2.用于比较对象,判断对象的引用是否指向堆内存的同一块地址. equals的作用 用于比较两个对象的内容是否相同 代 ...

  2. String类型中 "=="和"equals"比较的差别

    String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否 ...

  3. 【原创】Java和C#下String类型中的==和equals的原理与区别

    一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...

  4. [No0000B6]C#中 ==与equals的区别

    using System; internal class Person { public Person(string name) { Name = name; } public string Name ...

  5. Java中“==”和 equals的区别

    “==”的作用: 判断两个变量栈内存中存储的值是否相等,如果相等返回true,如果不相等返回false. 有两种形式的比较需要用到比较运算符“==”,一是两个基本数据类型之间的比较,二是两个引用数据类 ...

  6. 码农带你区分String类型的"=="和equals()

    大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344 情形一: String s1= new String("hello" ...

  7. String类中"=="、equals和普通类中"=="、equals的比较

    package cn.method.demo; public class StringDemo2 { public static void main(String[] args) { String s ...

  8. String类中的equals()方法:

    String类中的equals()方法: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { ret ...

  9. JAVA中==与equals的区别

    equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...

随机推荐

  1. 【DP 好题】hihoCoder #1520 古老数字

    题目链接 这道题的要点是状态转移的顺序. 要从低位向高位进行状态转移. Implementation string s; cin >> s; reverse(all(s)); int x, ...

  2. SqlServer中union 和 union all的区别

    ⒈UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同.⒉对重复结果的处理:UNION在进行表链接后会筛选掉重复的数据,UNION ALL不会去除重复的 ...

  3. 【模板】SPFA(不完全详解)

    一种最短路求法(个人觉得比DIJKSTRA好用) 用于有向图. 大概思路:从根节点开始,枚举每一个点,同时更新他们所联通的点的最短路径,如果路径被更新,则把这个点入队,一直重复这个操作直到队伍为空为止 ...

  4. Ubuntu18.04 出现E: Sub-process /usr/bin/dpkg returned an error code (100)

    You might want to reinstall dpkg by doing the following: sudo -i mkdir /tmp/dpkg cd /tmp/dpkg Mind t ...

  5. CentOS7部署HDP3.1.0.0

    Apache Ambari是一个基于Web的支持Apache Hadoop集群的供应.管理和监控的开源工具,Ambari已支持大多数Hadoop组件,包括HDFS.MapReduce.Hive.Pig ...

  6. IOS手机伪类a:active失效

    IOS手机伪类a:active失效:点击更改颜色,松开恢复 解决方案:OS系统的移动设备中,需要在按钮元素或body/html上绑定一个touchstart事件才能激活:active状态 docume ...

  7. 用原生JS写省市二级联动

    HTML代码 <select id="s1"> <option value="0">~请选择省份~</option> < ...

  8. node + express搭建api项目

    express框架 描述 express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能. 安装 // 1.使用npm淘宝镜像--cn ...

  9. vscode中外部引入js文件以及里面相应的方法

    随便写一个js文件,定义一个方法名,并且在组件中进行引用就算成功 ###~js function shuchu(){     console.log(1) } export { shuchu };   ...

  10. 从命令行运行postman脚本

    为什么要在命令行中运行 可以在无UI界面的服务器上运行 可以在持续集成系统上运行 运行准备 导出collection 安装nodejs和npm(或cnpm) 安装Newman 运行及生成测试报告支持4 ...