老司机也晕车--java字符串String晕车之旅
首先声明,有晕车经历的司机请自备药物,String也可能让你怀疑人生!
第一道 开胃菜
请听题!第一道题:
String hello="hello world!";
String hello1=new String("hello world!");
System.out.println(hello==hello1);
System.out.println(hello.equals(hello1));
提示: ==是比较两个对象引用是否正好引用到了相同的对象。
那么公布答案吧
false
true
旁白:
- new String是新建对象,和字符串常量对象不是同一个。
- equal是比较值
肯定不过瘾吧,那就再来。
第二道 汤
String hello="hello world!";
String hello2="hello world!";
System.out.println(hello==hello2);
System.out.println(hello.equals(hello2));
扫地僧看不下去了
true
true
旁边:
两个String类型的常量表达式,如果标明的是相同的字符序列,那么它们就用相同的对象引用来表示。
第三道 副菜
String hello="hello world!";
String append="hello"+" world!";
System.out.println(hello==append);
System.out.println(hello.equals(append));
那就公布答案
true
true
旁边:
两个String类型的常量表达式,如果标明的是相同的字符序列,那么它们就用相同的对象引用来表示。
第四道 主菜
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out.println(pig==dog);
System.out.println(pig.equals(dog));
不敢说了,还是公布答案吧
false
true
官方资料中有这么一段话:
Strings concatenated from constant expressions (§15.28) are computed at compile time and then treated as if they were literals.
Strings computed by concatenation at run time are newly created and therefore distinct.
翻译一下:
>通过常量表达式运算得到的字符串是在编译时计算得出的,并且之后会将其当作字符串常量对待.
>在运行时通过连接运算得到的字符串是新创建的,因此要区别对待。
看黑色重点标注。
第五道 蔬菜类菜肴
final String pig = "length: 10";
final String dog = ("length: " + pig.length()).intern();
System.out.println(pig==dog);
System.out.println(pig.equals(dog));
先看答案吧
true
true
旁边:
可以通过显示的限定运算得到的字符串为字符串常量,String.intern方法可以"限定"
第六道 甜品
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out. println("Animals are equal: "+ pig == dog);
System.out.println("Animals are equal: "+ pig .equals(dog));
大家已经迫不及待了,先看答案
false
Animals are equal: true
如果你想一下操作符的优先级就明白了,“+”优先级高于“==”
第七道 咖啡、茶
看大家晕车严重,那就不出题目了
通过上面的教训,在比较对象引用时,应该优先使用equals 方法而不是 == 操作符,除非需要比较的是对象的标识而不是对象的值。
参考资料
【1】https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.10.5
【2】https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
老司机也晕车--java字符串String晕车之旅的更多相关文章
- Java字符串String
Java字符串String 我们知道Java的字符窜是Immutable(不可变)的,一旦创建就不能更改其内容了:平常我们对字符串的操作是最多的,其实对字符串的操作,返回的字符串都是新建的字符串对象, ...
- Java字符串String 集合的迭代器
Java字符串String 我们知道Java的字符窜是Immutable(不可变)的,一旦创建就不能更改其内容了:平常我们对字符串的操作是最多的,其实对字符串的操作,返回的字符串都是新建的字符串对象, ...
- java 字符串String
在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象的方法: 只要是双引号标 ...
- Java 字符串 String
什么是Java中的字符串 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对 ...
- Java字符串String类操作方法详细整理
关于String类的基本操作,可分为以下几类: 1.基本操作方法 2.字符串比较 3.字符串与其他数据类型之间的转换 4.字符与字符串的查找 5.字符串的截取与拆分 6.字符串的替换与修改 我觉得在整 ...
- java 字符串(String)常用技巧及自建方法模块汇总
1.String类常用方法汇总 (1)删除字符串的头尾空白符 public String trim() (2)从指定位置截取字符串 public String substring(int beginI ...
- [Java学习] Java字符串(String)
从表面上看,字符串就是双引号之间的数据,例如“微学苑”.“http://www.weixueyuan.net”等.在Java中,可以使用下面的方法定义字符串: String stringName = ...
- Java字符串(String)
从表面上看,字符串就是双引号之间的数据,例如“微学苑”.“http://www.weixueyuan.net”等.在Java中,可以使用下面的方法定义字符串: String stringName ...
- Java字符串——String深入
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10840495.html 一:字符串的不可变性 1.可变 与 不可变 辨析 Java中的对象按照创建后,对象的 ...
随机推荐
- CentOS7源码安装Nginx
系统平台:腾讯云服务器 CentOS 7.3 64位 一.安装编译工具及库文件 [root@VM_0_5_centos ~]# yum install -y make zlib zlib-devel ...
- JavaScript-基本语法和数据类型
前奏:在HTML中使用JavaScript 1_推荐src引用外部JavaScript文件,方便管理与维护,标签位置在页面最下面,使浏览器更优先加载页面内容. 2_HTML页面需要有标准 ...
- 2.2.2python的BeautifulSoup库
from bs4 import BeautifulSoupimport rebroken_html = '<ul class="country"><li>A ...
- 物联网网关MQTT应用与配置测试介绍
1.MQTT介绍: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),作为除Modbus外最常用的协议之一,因其基于发布/订阅的模式,具有资源消 ...
- 隐马尔科夫模型HMM介绍
马尔科夫链是描述状态转换的随机过程,该过程具备“无记忆”的性质:即当前时刻$t$的状态$s_t$的概率分布只由前一时刻$t-1$的状态$s_{t-1}$决定,与时间序列中$t-1$时刻之前的状态无关. ...
- window下不用安装虚拟机,也可以玩转linux,玩转最新redis
想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...
- jquery 动态载入页面,并且保证 url 变动
最近做一个新的项目,项目页头,导航,页尾是不变的,只有中间部分是通过加载其他页面,达到内容刷新的. 大概结构如下, 要求, 1. 正文部分可以通过加载一个页面达到刷新效果 2. 保留加载的页面 url ...
- python环境的安装 环境变量和系统变量
一.python 的安装 python 2.7 和 python 3.6的安装(一路点点点就行) 在安装的时候注意一下红框的内容,意思代表将其添加到环境变量中 环境变量是在操作系统中一个具有特定名字的 ...
- cmd中,查询sqlcmd命令的选项
像我这样的小白,有时候看到-d,-S,-P这些都不知道什么意思,后面知道了是一些命令的选项.如sqlcmd,打开cmd,输入sqlcmd -? 即可获得选项的含义. .
- forward(转发)和redirect(重定向)的区别
在学习Servlet和JSP时,经常会使用到forward和redirect,我们先来看这两者在Servlet中的调用方式: 1.forward request.getRequestDispatche ...