学习Java,容易被你忽略的小细节(2)

  昨天心情真的太糟糕了,写完《学习Java,值得注意你注意的问题(1)》之后,迎来些许的支持以后就是一片片的谴责。我的主页上涌现出许许多多Java方面的牛人,谴责我水平太低,写的问题太初级。搞得我非常抑郁,直接导致我和我的女神聊天到后半夜2点多,就是想一吐心中不快。不过这里我还真应该谢谢他们,没有他们我真找不到借口和我的女神聊天呢。谢谢你们啊。

  我知道自己水平不够,但是我真的有用心在写博客。每次博客上写出的问题都是事前询问过同学的,都是同学们比较迷茫的区域,都是一些只知其然不知其所以然的部分。因为《学习Java,值得你注意的问题》吸引了太多Java牛人的关注,我不得不被迫将文章的名字更改为《学习Java,容易被你忽略的小细节》。这里请大家注意了我说的是容易被你忽略的小细节,这些细节可能对于Java牛人来说真的就像南极冰川上一座不起眼的冰山,微不足道。所以我有必要在这里表明态度,请各位Java牛人绕路,不要抨击小弟了。我只想向和我一样初学Java的同学提供一些我个人觉得有价值的建议。

  吐槽完毕,我们闲话少说。下面就来介绍一下,学习Java,容易被你忽略的小细节(2)

  在学习String类的时候,在书上看到这样一段代码:

		if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");

  下面附带文字,运算符“==”只能检查string1和string2是否指向同一个对象,它不能辨别两个不同的对象是否包含相同内容。因此,不能用“==”检测两个字符串变量是否具有相同内容,而equals()方法可以用于对象内容相等的比较。

  遇到这种问题显然我会自己动手调试一下才会甘心。但是调试结果领我很郁闷。

  代码:

public class TestDemo2{public static void main(String[] args){String string1 = "testDemo";String string2 = "testDemo";if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");}
}

  调试结果:

"string1 and string2 are the same object"???这是要闹哪样啊,难道书上写错了?难道运算符“==”也可以用于对象内容相等的比较?

看到调试结果以后我又在图书馆的书架上找了几本《Java程序设计》相关的书籍仔细地阅读,最后找打了问题的原因。

在一本书籍的一个角落里有这样一段话:

注:程序设计中频繁使用字符串。为了提高效率,节省内存,Java虚拟机尽力确认相同的串并把它们存放在同一内存空间,但这不能保证所有相同的串都具有相同的内存地址。因此还需要使用equal()方法判断两个串内容是否相同,使用“==”判断两个串的引用是否相同(即,指向相同的内存地址)。

虽然Java虚拟机是为了提高效率,节省内存。但是显然差点误导我嘛,坏人!!!

在Java程序设计中遇到判断字符串内容是否相等的问题时,建议代码:

if(string1.equals(string2))System.out.println("string1 and string2 have the same contents");
else System.out.println("string1 and string2 are not equal");

  虽然上面问题很基础,但是我相信一定有很多同学在学习到相同知识点的时候也会和我一样有迷惑。请大家不要单单记住判断字符串相等的时候应该用equals()方法,不能用“==”。最好做到知其然,也知其所以然。都是Java虚拟机惹的祸。

(ps:经过博友kongkongyzt的指点,我重新测试了一下)

  代码:

public class TestDemo2{public static void main(String[] args){//string1 和string2 内容相同,地址不同。String string1 = new String("testDemo");String string2 = new String("testDemo");if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");if(string1.equals(string2))System.out.println("string1 and string2 have the same contents");else System.out.println("string1 and string2 are not equal");}
}

  测试结果:

  从上面测试结果可以很清楚的看出对于String类,equals()方法和运算符“==”在使用上的区别。在这里非常感谢博友kongkongyzt的指点。

  

 

  上面就是学习Java,容易被你忽略的小细节(2)。

  欢迎继续关注本博更多新鲜动向,博主QQ:2584451009,有什么建议和忠告欢迎评论或留言。

  

转载于:https://www.cnblogs.com/FlightButterfly/p/3350150.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

controller是什么意思_SpringMVC是什么??

SpringMVC是什么?一,首先是一个MVC框架。在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发&#xff0…

You third iOS app,这个APP要放到手机上面运行,才会成功,才会新建记录。

当提示如上图所示时,很可能你只有在苹果设备上运行才可以提示成功, iCloud is available。 转载于:https://www.cnblogs.com/liqiwa/p/5933542.html

客户要求ASP.NET Core API返回特定格式,怎么办?(续2)

前言前2次,我们都是假设客户需要返回不同的字符串格式。但是,有可能客户要求的返回是非本文格式,比如文件流。怎么办?思路前提,当然还是使用同一API接口,不影响现有使用方式。虽然ASP.NET Core Web API默认…

第四章例题、心得及问题。

例题4-1&#xff1a; #include<stdio.h> #include<math.h> int main(void) {int denominator,flag;double item,pi;flag1;denominator1;item1.0;pi0;while(fabs(item)>0.0001){itemflag*1.0/denominator;pipiitem;flag-flag;denominatordenominator2;}pipi*4;pr…

springboot springcloud区别_SpringCloud微服务全家桶-第一篇!为什么要用微服务

从今天开始&#xff0c;学习SpringCloud微服务全家桶。一、引导1、什么是微服务&#xff1f;2、微服务之间是如何独立通讯的3、springCloud和Dubbo有哪些区别&#xff1f;4、什么是服务熔断&#xff1f;什么是服务降级5、微服务的优缺点分别是什么&#xff1f;6、微服务技术栈有…

C#之Lock

lock 关键字将语句块标记为临界区&#xff0c;方法是获取给定对象的互斥锁&#xff0c;执行语句&#xff0c;然后释放该锁。 class Program{static void Main(string[] args){Thread t new Thread(LockObject.MonitorIncrement);Thread t1new Thread(new ThreadStart(LockObje…

记一次 .NET 某消防物联网 后台服务 内存泄漏分析

一&#xff1a;背景 1. 讲故事去年十月份有位朋友从微信找到我&#xff0c;说他的程序内存要炸掉了。。。截图如下&#xff1a;时间有点久&#xff0c;图片都被清理了&#xff0c;不过有点讽刺的是&#xff0c;自己的程序本身就是做监控的&#xff0c;结果自己出了问题&#xf…

高性能网站建设的最佳实践(二)

原文译自雅虎开发者社区&#xff0c;转载译文请标明出处。关注我的sina微博&#xff0c;共同进步&#xff01;为了让网页响应速度更快Exceptional Performance团队列出了一系列的最佳实践&#xff0c;包括35个最佳实践条目&#xff0c;分成7种类型类。避免重定向标签&#xff1…

python带通配符的字符串匹配_Bash技巧:实例介绍数个参数扩展表达式以处理字符串变量...

Linux 的 bash shell 提供了多种形式的参数扩展表达式&#xff0c;可以获取变量自身的值&#xff0c;或者对变量值进行特定处理得到一个新的值&#xff0c;等等。本篇文章对字符串变量值相关的参数扩展表达式进行汇总说明。假设在 bash 中定义了 filepathexample/subdir/testfi…

幸福手机,给爸妈的高端大气上档次的手机

打造高端老人手机——幸福手机 江苏智联天地科技有限公司历经2年&#xff0c;手机研发投入超过4000万&#xff0c;打造中国第一品牌的高端老人手机&#xff0c;手机将于2014年12月正式对外发布&#xff0c;是国内第一款高端老人手机——幸福手机&#xff08;ThimFone&#xff0…

MASA Framework - EventBus设计

概述利用发布订阅模式来解耦不同架构层级&#xff0c;亦可用于解决隔离业务之间的交互优点&#xff1a;松耦合横切关注点可测试性事件驱动发布订阅模式发布者通过调度中心将消息发送给订阅者。调度中心解决发布与订阅者之间的关系&#xff0c;保证消息可以送达订阅者手中。发布…

wireshark-win64-3.4.0安装_这9类轴承的安装方法,你可都知道?有哪些需要注意的呢?...

轴承是当代机械设备中一种重要零部件。随着时间的推移&#xff0c;轴承会发生磨损&#xff0c;合理的安装和使用可以让机械设备减少不必要的安全隐患。前面文章讲了如何拆卸轴承&#xff0c;今天就给大家讲讲各类轴承应该如何安装&#xff01;一、轴承安装前的准备工作轴承的安…

史上最牛数学简史

全世界只有3.14 % 的人关注了爆炸吧知识“中国现代数学之父”华罗庚曾说过宇宙之大&#xff0c;粒子之微火箭之速&#xff0c;化工之巧地球之变&#xff0c;生物之谜日用之繁&#xff0c;无处不用数学回首往昔数学始终伴随我们左右纵横交错的几何、繁琐复杂的运算难以求解的方程…

linux下使用pidcat找bug

第一步&#xff1a; 安装pidcat 第二步&#xff1a; 找到APP的包名比如adb shell ps | grep sangforadb shell pm list package第三步&#xff1a; 在ubuntu终端输入pidcat.py 包名结果&#xff1a;

创建与删除索引

索引是加速查询的主要手段&#xff0c;特别对于涉及多个表的查询更是如此。本节中&#xff0c;将介绍索引的作用、特点&#xff0c;以及创建和删除索引的语法。13.4.1 使用索引优化查询索引是高速定位数据的技术&#xff0c;首先通过一个演示样例来了解其含义及作用&#xff0…

r vector 4 elements_Vector类与Enumeration接口

Vector类用于保存一组对象&#xff0c;由于java不支持动态数组&#xff0c;Vector可以用于实现跟动态数组差不多的功能。如果要将一组对象存放在某种数据结构中&#xff0c;但是不能确定对象的个数时&#xff0c;Vector是一个不错的选择。例&#xff1a;将键盘上输入的一个数字…