问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何比较两个字符串

发布网友 发布时间:2022-05-14 11:49

我来回答

1个回答

热心网友 时间:2022-04-23 05:12

知道什么是引用不?引用也就是引用变量,Java中的变量按照数据类型,可以分为两种,一种是基本数据类型变量,一种是引用数据类型变量:
基本数据类型变量:byte,short,char,int,long,float,double,boolean,以这8种基本数据类型声明的变量,如:int i;
基本数据类型变量:到目前为止引用数据类型包括 类,接口,数组,枚举,注解,以它们声明的变量叫做引用变量,或者引用,如:
String s1 = new String("abc");
String s2 = "abc";
引用s1里面存的是一个地址,地址什么样你不用管,就知道 通过这个地址就可以准确的找到上面这个new出来的String对象,所以我们说,引用s1指向了这个String对象。同样,s2也指向了一个String对象。
再说 == 和 equals 的区别:
s1 == s2 是true还是false?
== 比较的是引用地址,换句话说,==号两边的这两个变量所记录的地址是不是相同,用new关键字new出来的对象位于内存的堆区,"abc"是一个字符串常量,Java中字符串常量也是String类的一个对象,字符串常量被分配在内存的data segment(数据区),现在它们是两个不同的对象,s1指向new出来的这个,s2指向这个字符串常量,s1和s2指向的是不同的对象,它们的引用地址当然不同,毫无疑问表达式返回false

再说equals方法,s1.equals(s2) 是true还是false?
有些人上来就说equals方法比较的内容,其实这是不全面的,equals方法和==的区别,面试也经常考,
equals方法是父类Object所定义的方法,用来实现两个对象内容是否相等的逻辑,说equals方法要从两个方面:
1)从Object角度来说,==与equals是一样的,都是比较引用,因为Object类的equals()方法是这样定义的, public boolean equals(Object obj) { return (this == obj); }
方法内部的实现就是比较引用地址,用的也是==号,所以对于Object来讲,equals与==是一样的。
2)对于其它类来说,可以根据需要,在自定义的类中重写(Override) equals方法,实现内容是否相等的逻辑,因为String类重写了equals方法,所以我们才说String的equals比较的是两个字符串的内容,内容就是"abc",第一个new出来的时候传入构造方法的实参就是"abc",第二个字符串常量也是"abc",它们虽然是两个不同的对象,但是它们的内容相同,所以s1.equals(s2)返回真,它们相等。
我再给你写一个,String s3 = "abc"; String s4 = new String("abc");
s2 == s3 是真是假?
答案是true,注意,Java虚拟机 对于内存数据区里面的内容有一个优化,如果已经存在了,不会分配第二个,上面已经 String s2 = "abc";了, 这个"abc"已经存在了,下面String s3 = "abc"; 就不会分配第二个"abc"了,那么s3指向谁?s3也指向上面s2指向的这个对象,现在是s2和s3同时指向同一个对象,那么它们的地址当然一样,==比较的是引用地址,所以s2 == s3 返回true。
s2.equals(s3) 呢? 都是同一个对象了,那自己和自己内容还能不一样?返回true。
s1 == s4 是真是假?
答案是false,注意,使用new关键字生成的对象分配在内存的堆区(heap),并且只要是用了new关键字了,不管你new多少个,内容是否一样,它们都是不同的对象,new一个就出现一个新的,所以s4指向的这个对象,和s1指向的这个是两个不同的对象,地址不同, 因此s1 == s4为false,使用equals比较返回true,因为内容相同。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 设有两个字符串a和b,要求将a、b串对应字符中的较小者存在数组c的对应位置上(c语言) 有两个字符串分别用字符数组str1和str2表示,请编写一个字符串连接函数strconnect, 怎样炖驴肉都有那些调料 有两个字符串,利用函数实现两个字符串的链接,两个字符串比较大小,计算两个字符串的长度,将第二个字符 鲜花玫瑰饼的介绍 我的被举报了,现在别人可以给我发信息,我发不出去了,怎么办? 我的被举报了,现在别人可以给我发信息,我发不出去了,怎么办? angularjs,angular 2,reactjs,react native有什么区别 村委会公章丢失如何补办 黑木耳洗净后,沸水焯水后就存放冰箱冷藏室吗? 我把村委会公章弄丢了怎么办 村委会公章如何管理,章应该谁拿 村委会换界后,落选的老主任,以各种理由拒绝交出村公章,该怎么办,有什么法律依据? 我老咽喉炎怎么办,不会病变吗 两个村合并成一个村委会,更换印章需要办什么手续? 村委会公章坏了换新章要什么手续村委公章没有损坏村支书有权更换新章吗? 您好!村委会申请更换新公章需要向乡政府打报告吗 咽炎老是反反复复怎么办 村委会公章坏了换新章要什么手续 怎么才能私信你给个号码 c语言三、 设有两个字符串,各有10个字符,试编程完成如下功能: 有两个字符数组 a、b,则以下正确的输入语句是 A.scanf(“%s%s”,&a,&b);B.gets(a); gets(b); 是什么AngularJS和AngularDart之间的区别 中央空调机组有什么进口品牌 组合式空调机组国内外品牌中什么公司做的外观比较美观 什么牌子空调的压缩机是进口的 微信好友被删了,自己又不知道他的了。怎么找回? 支付宝卡通是VISA.MASTERCARD还是什么? 亲爱的们,谁有陈情令高清壁纸啊,求求求! 初二上册第二单元英语作文我给你发张图片,要求75个字 我有一张master卡 里面有钱的 可以绑定支付宝把钱提到支付宝里吗 八年级上册英语第二单元15页3c作文怎么写? 请问,谁有《陈情令》这张图的高清版? 八年级上期英语作文第二单元滴 求:陈情令蓝湛抚琴的高清图? 八年级英语第二单元上册作文带翻译 日草 这类词从哪里传开的 求帮忙写一篇关于初二第二单元的英语作文。六十词左右。最好能带翻译。 台湾人说的"日草"指的是什么? 八年级英语下册第二单元作文怎么写