学习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");
else
System.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");
else
System.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");
else
System.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,有什么建议和忠告欢迎评论或留言。
学习Java,容易被你忽略的小细节(2)的更多相关文章
- 学习Java,容易被你忽略的小细节(3)
在<学习Java,容易被你忽略的小细节(2)>中我们已经深入讨论过String类中equals()方法的使用,在本文中我们将进一步讨论equals()方法在其他境况下的使用方法. 首先,我 ...
- 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...
- java 性能优化:35 个小细节,让你提升 java 代码的运行效率
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- JAVA性能优化:35个小细节让你提升java代码的运行效率
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- java中的@Override标签,小细节大作用
转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html 一般用途 ...
- Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP)
Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP) 说明:最近群里面的一个网友问的一个问题,让我陷入了深思,他问的问题很基础也很真实,"大佬,你们是怎么学习的呢?" ...
- 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...
- 从零开始学习JAVA(入门基础)
目录 博主从零开始学习JAVA(入门基础) 1.搭建JAVA开发环境 卸载JDK(未安装的请忽略) 安装JDK 2.编程语言中,何为编译型与解释型 编译型 解释型 3.第一个JAVA应用程序 4.JA ...
- 论新手该如何学习java?
由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...
随机推荐
- linux系统下信号具体解释2
信号是UNIX 系统所使用的进程通信方法中,最古老的一种.信号不但能从内核发往一个进程,也能从一个进程发往还有一个进程.比如,用户在后台启动了一个要运行较长时间的程序,假设想中断其运行,能够用kill ...
- Eclipse使用技巧总结(五)
三十五.快速回退到上次编辑处 Ctrl + Q 三十六.查看调用层次 Ctrl + Alt + H 三十七.快速查看某个类 Ctrl + Shift + T 三十八.快速定位 Ctrl + K :首 ...
- JAVA SortedMap接口
SortedMap接口主要提供有序的Map实现. Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap. TreeMap实现了SortedMap接口,保证了 ...
- 共享Session
概述 现在的大型网站中,会面临实现多台服务器中的session数据共享问题.当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者ip)访问时被分配到不同的服务器上,假设在A服务器登 ...
- jQuery插件开发小总结
另一篇 jQuery插件开发通常有3种方式 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部件工厂方式创建 通常 ...
- 基于JUnit和Ant测试程序正在运行使用Kieker(AspectJ)监测方法
这篇日志的目的从标题里能够看出来.这也是我们实验须要,必须总结一下,方便其它师弟师妹在这个基础上做实验. 我已经介绍了非常多基于Kieker的监控方法,这里以Prefuse这个开源可视化Java框架为 ...
- 微信公众平台中临时二维码的scene_id为32位非0整型
原文:微信公众平台中临时二维码的scene_id为32位非0整型 微信公众平台中临时二维码的scene_id为32位非0整 ...
- android圆形旋转菜单,而对于移动转换功能支持
LZ该公司最近接手一个项目,需要写一个圆形旋转菜单,和菜单之间的移动换位支持,我本来以为这样的demo如若互联网是非常.想想你妈妈也帮不了我,空旋转,但它不能改变位置,所以LZ我们只能靠自己摸索. 最 ...
- ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...
- c# 守护进程,WPF程序自守护
原文:c# 守护进程,WPF程序自守护 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/79035246 如何 ...