作为一个菜鸟  之前一直迷茫 都说比较字符串要用equals()方法  但是有时候用==貌似也可以  话不多说  先来一个例子

public static void main(String[] args) {
String str1="str";
String str2="str";
System.out.println(str1==str2);//返回true   System.out.println(str1.equals(str2));//返回true
}

返回一个 true

再来一个用==不行的例子

public static void main(String[] args) {
String str1=new String("str");
String str2=new String ("str");
System.out.println(str1.equals(str2));//返回true
System.out.println(str1==str2);//返回false }

经过比较得知  new()出来的字符串不能用==比较

有以下两种原因

  1、equals()方法比较的是两个对象值   而==比较的两个引用是否指向同一个对象   有些同学要问了  为什么直接=字符串和new()字符串难道不同吗?  对的 第二点就是new和=的区别

  2、用=时 会在字符常量串常量池中创建 如 string  s="123"; 字符串常量池不属于堆也不属于栈  这样就会在字符串常量池创建“123”(如果字符串常量池中已经有“123” 就把s引用指向它)。再创建一个string s1=“123”;

    会把s1的引用指向已经存在的“123”;而不会再创建一个 这样s和s1的引用都是一样的 用==也可以判断出来

    用new()时  不管字符串常量池中有没有  都到从堆内存中开辟一块空间存放 new一次 开辟一次 所以 String str1=new String("str"); String str2=new String ("str");是不同的两块空间 所以引用也就不相同的

    ==只会判断两个引用是否指向同一个对象(也就是同一块内存地址) 所以这时候用==是false

结论

  1、==用于比较两个引用是否指向同一个对象   equals用于比较两个对象是否相等

  2、由于字符串特殊 在字符串常量池中的字符串可以使用==也可以使用equals 推荐不管哪种方式 只要是比较字符串就用equals

==和equals在比较字符串时候的区别的更多相关文章

  1. Java进阶(二十一)java 空字符串与null区别

    java 空字符串与null区别 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串, ...

  2. python2和3在处理字符串上的区别

    python2和3在处理字符串上的区别   python2和python3对于字符串的处理有很大的区别 熟悉了python2的写法用python3时真的会遇到很多问题啊…… 区别 python2中有一 ...

  3. C语言 字符串指针和字符串数组使用区别

    字符串指针和字符串数组使用区别 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 ...

  4. Java中"str1.equals(str2)"和"str1==str2"的区别

    大家好,这是我的第一篇博客,作为即将入职的学生,我现在的心情是既好奇又兴奋,对未知的职场生活充满了无限的憧憬,也想赶紧对大学生活say goodbye,因为自己的能力现在还比较有限,我想通过博客这个平 ...

  5. 【Java】整理关于java的String类,equals函数和比较操作符的区别

    初学 Java 有段时间了,感觉似乎开始入了门,有了点儿感觉但是发现很多困惑和疑问而且均来自于最基础的知识折腾了一阵子又查了查书,终于对 String 这个特殊的对象有了点感悟大家先来看看一段奇怪的程 ...

  6. Scanner中next()和nextline()读取字符串方法和区别

    在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单.在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(), ...

  7. stringBuffer的使用及字符串比较的区别

    /* * 关于equals()和==: 对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true; * 而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的 ...

  8. "==" equals和hashCode的联系和区别

    写这篇文章的目的是自己彻底把三者搞清楚,也希望对你有所帮助. 1."=="运算符对与基本类型(int long float double boolean byte char sho ...

  9. hashcode()和equals()的作用、区别、联系

        介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode() ...

随机推荐

  1. 【原】eclipse使用技巧之代码编辑器分隔窗口

    相信很多使用Intellj IDE的朋友对其split screen功能赞赏有加!其实在eclipse中也可以方便地代码编辑多windows.多views!但是隐藏的有点深,很多朋友不常用到,甚至以为 ...

  2. 局域网查看工具Lansee注册码

    相信好多人为查看局域网IP发愁,今天给大家推荐一个工具 lansee 猛戳下载

  3. ASP.Net请求处理机制初步探索之旅 - Part 2 核心(转)

    开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):Ht ...

  4. 第一份PHP程序

    <?php list($ncase) = fscanf(STDIN,"%d"); $mod = 1000000007; for($n=0;$n<$ncase;++$n) ...

  5. attempt to index a nil value (global 'luasql')

    require ’socket‘ require ’luasql.mysql' 上述返回结果都是正常 但是执行 env = luasql.mysql(),报错: stdin:1: attempt to ...

  6. php strtok()函数用法,及使用时遇到的问题

    strtok()函数:用来将一段字符串分割为子字符串 strtok(string $str, string $token) strtok( string $token) //仅第一次调用$str,以后 ...

  7. 如何基于Go搭建一个大数据平台

    如何基于Go搭建一个大数据平台 - Go中国 - CSDN博客 https://blog.csdn.net/ra681t58cjxsgckj31/article/details/78333775 01 ...

  8. 综合: Java 对象初始化过程

    class Fu { Fu() { show(); } void show() { System.out.println("xixi"); } } class Zi extends ...

  9. 原!总结 quartz集群 定时任务 测试运行ok

    由于项目优化重构,想将定时任务从quartz单机模式变成集群或分布式的方式.于是,百度了一圈....修修改改...用集群的方式部署定时任务,测试可以... 集群?分布式?什么区别? 集群:同一个业务, ...

  10. rest_framework之魔法类

    视图 from rest_framework.viewsets import ViewSetMixin # 注意先后顺序,ViewSetMixin写在前面 class TestAll(ViewSetM ...