String类型中"=="和"equals"的区别
"=="比较的是两个字符串的内存地址。 "equals"比较的是两个字符串的实际值。
例子1.
String s1="abc";
String s2="abc";
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}
此时输出:两个字符串值相等
两个字符串指向同一个内存地址
why:当给s2赋值abc时,s2会自动去寻找有没有abc这个值得字符串。如果有,会copy s1(包含内存地址)。如果没有,再创建一个新内存地址。
例子2.
String s1="abc";
String s2=new String("abc")
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}
此时输出:两个字符串值相等
why:s2创建了一个新对象,值为abc,与s1不再是同一个内存地址,所以只输出:两个字符串相等
例子3.
String s1="abc";
String s2=new String()
s2="abc";
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}
此时输出:两个字符串值相等
两个字符串指向同一个内存地址
why: 虽然new了一个新对象,但没有在此时给值,后来赋值的时候,仍是copy 了s1的内存地址。
例子4.
String s1="abc";
String s2=new String("abc");
s2=s2.intern();
if(s1.equals(s2)){
System.out.println("两个字符串值相等")
}
if(s1==s2){
System.out.println("两个字符串指向同一个内存地址");
}
此时输出:两个字符串值相等
两个字符串指向同一个内存地址
why: 调用了intern()方法,此时s2先去找有没有abc,如果有,copy 内存地址,如果没有,创建新的。
String类型中"=="和"equals"的区别的更多相关文章
- 关于String类型中==和equals的区别。
"=="操作符的作用 1.用于基本数据类型的比较,比较的是值. 2.用于比较对象,判断对象的引用是否指向堆内存的同一块地址. equals的作用 用于比较两个对象的内容是否相同 代 ...
- String类型中 "=="和"equals"比较的差别
String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否 ...
- 【原创】Java和C#下String类型中的==和equals的原理与区别
一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...
- [No0000B6]C#中 ==与equals的区别
using System; internal class Person { public Person(string name) { Name = name; } public string Name ...
- Java中“==”和 equals的区别
“==”的作用: 判断两个变量栈内存中存储的值是否相等,如果相等返回true,如果不相等返回false. 有两种形式的比较需要用到比较运算符“==”,一是两个基本数据类型之间的比较,二是两个引用数据类 ...
- 码农带你区分String类型的"=="和equals()
大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344 情形一: String s1= new String("hello" ...
- String类中"=="、equals和普通类中"=="、equals的比较
package cn.method.demo; public class StringDemo2 { public static void main(String[] args) { String s ...
- String类中的equals()方法:
String类中的equals()方法: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { ret ...
- JAVA中==与equals的区别
equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...
随机推荐
- Python学习【day02】- Python基础练习题
#!/usr/bin/env python # -*- coding:utf8 -*- # 执行Python 脚本的两种方式 # 答:①在windows的cmd窗口下 > D:/Python/p ...
- 小记---------sparkRDD的Transformation 和 Action 及案例 原理解释
RDD :弹性分布式数据集:是一个容错的.并行的数据结构,可以让用户显式地将数据存储到磁盘或内存中,并控制数据的分区 RDD是Spark的核心数据结构,通过RDD的依赖关系形成Spark的调度顺序 ...
- vue第一篇(搭建vue开发环境)
1.下载node并安装 下载地址: https://nodejs.org/zh-cn/ 下载后双击文件安装 2.检查是否安装成功 node -v v10.16.0 npm -v 6.9.0 如果能正常 ...
- std::tr1::function和bind组件
C++中std::tr1::function和bind 组件的使用 在C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数 ...
- 多表表与表关系 增删改查 admin
今日内容 多表表与表关系 增删改查表数据 admin 多表操作 表与表关系 默认指向主键 可能是隐藏主键 djamgo1.1默认级联(models. SET NULL解除级联) 一对一 先建立少的一方 ...
- 引入DDT
一.大致介绍: DDT-Data Driven Test 是Python的第三方库,提供了创建数据驱动的测试,在线安装为:pip install ddt @data 表示元祖的列表数据 @unpack ...
- ProGuard 最全混淆规则说明
Input/Output Options 输入输出选项 -include filename 递归引入目录的配置文件 -basedirectory directoryname -injars class ...
- 编译LNMP部署动态网站环境
LNMP动态网站部署架构是由一套 Linux+Nginx+MySQL+PHP 组成的动态网站系统解决方案. 以下配置环境为:Linux=RHEL7 --> Nginx=1.13 --> M ...
- deepin 15.10.1 GTX1060 NVIDIA 驱动安装,双屏显示问题记录
有一段时间没有用Linux了.由于买了个4k的戴尔显示屏,在deepin系统上无法用,从昨晚到现在,总于解决了我的问题! 问题1:无法直接在深度的显卡驱动管理器哪里直接切换,网上看到很多人都有这个问题 ...
- JAVA高级语法
高级语法 第三章:面向对象和高级语法 实例化: 不实例化,就是一个空指针 注意,声明和实例化是两个过程.声明的过程是不分配内存空间的,只有实例化才会真正分配空间 对变量的分类 实例变量只有实例化之后才 ...