当前位置: 首页 > news >正文

麻辣烫配方教授网站怎么做抖音推广引流平台

麻辣烫配方教授网站怎么做,抖音推广引流平台,网站建设需要的东西,分销商城开发公司1. 区别 “”操作符用于比较两个对象的地址是否相等。.equals() 方法用于比较两个对象的内容是否相等。 Object 类的 .equals() 方法默认采用的是“”操作符进行比较。假如子类没有重写该方法的话,那么“”操作符和 .equals() 方法的功效就完全一样——比较两个对…

1. 区别

  • “==”操作符用于比较两个对象的地址是否相等。
  • .equals() 方法用于比较两个对象的内容是否相等。

Object 类的 .equals() 方法默认采用的是“”操作符进行比较。假如子类没有重写该方法的话,那么“”操作符和 .equals() 方法的功效就完全一样——比较两个对象的内存地址是否相等。

但实际情况中,有不少类重写了 .equals() 方法,因为比较内存地址的要求比较严格,不太符合现实中所有的场景需求。拿 String 类来说,我们在比较字符串的时候,的确只想判断它们俩的内容是相等的就可以了,并不想比较它们俩是不是同一个对象。

况且,字符串有字符串常量池的概念,本身就推荐使用 String s = “字符串” 这种形式来创建字符串对象,而不是通过 new 关键字的方式,因为可以把字符串缓存在字符串常量池中,方便下次使用,不用遇到 new 就在堆上开辟一块新的空间。

2. .equals()源码

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String aString = (String)anObject;if (coder() == aString.coder()) {return isLatin1() ? StringLatin1.equals(value, aString.value): StringUTF16.equals(value, aString.value);}}return false;
}

首先,如果两个字符串对象的可以“==”,那就直接返回 true 了,因为这种情况下,字符串内容是必然相等的。否则就按照字符编码进行比较,分为 UTF16 和 Latin1,差别不是很大,就拿 Latin1 的来说吧。

@HotSpotIntrinsicCandidate
public static boolean equals(byte[] value, byte[] other) {if (value.length == other.length) {for (int i = 0; i < value.length; i++) {if (value[i] != other[i]) {return false;}}return true;}return false;
}

这个 JDK 版本是 Java 17,也就是最新的 LTS(长期支持)版本。该版本中,String 类使用字节数组实现的,所以比较两个字符串的内容是否相等时,可以先比较字节数组的长度是否相等,不相等就直接返回 false;否则就遍历两个字符串的字节数组,只有有一个字节不相等,就返回 false。

这是 Java 8 中的 equals 方法源码:

public boolean equals(Object anObject) {// 判断是否为同一对象if (this == anObject) {return true;}// 判断对象是否为 String 类型if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;// 判断字符串长度是否相等if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;// 判断每个字符是否相等while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;
}

JDK 8 比 JDK 17 更容易懂一些:首先判断两个对象是否为同一个对象,如果是,则返回 true。接着,判断对象是否为 String 类型,如果不是,则返回 false。如果对象为 String 类型,则比较两个字符串的长度是否相等,如果长度不相等,则返回 false。如果长度相等,则逐个比较每个字符是否相等,如果都相等,则返回 true,否则返回 false。
“如果要进行两个字符串对象的内容比较,除了 .equals() 方法,还有其他两个可选的方案。”

1)Objects.equals()

Objects.equals() 这个静态方法的优势在于不需要在调用之前判空。

public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));
}

如果直接使用 a.equals(b),则需要在调用之前对 a 进行判空,否则可能会抛出空指针 java.lang.NullPointerException。Objects.equals() 用起来就完全没有这个担心。

Objects.equals("小萝莉", new String("小" + "萝莉")) // --> true
Objects.equals(null, new String("小" + "萝莉")); // --> false
Objects.equals(null, null) // --> trueString a = null;
a.equals(new String("小" + "萝莉")); // throw exception

2)String 类的 .contentEquals()

.contentEquals() 的优势在于可以将字符串与任何的字符序列(StringBuffer、StringBuilder、String、CharSequence)进行比较。

public boolean contentEquals(CharSequence cs) {// Argument is a StringBuffer, StringBuilderif (cs instanceof AbstractStringBuilder) {if (cs instanceof StringBuffer) {synchronized(cs) {return nonSyncContentEquals((AbstractStringBuilder)cs);}} else {return nonSyncContentEquals((AbstractStringBuilder)cs);}}// Argument is a Stringif (cs instanceof String) {return equals(cs);}// Argument is a generic CharSequenceint n = cs.length();if (n != length()) {return false;}byte[] val = this.value;if (isLatin1()) {for (int i = 0; i < n; i++) {if ((val[i] & 0xff) != cs.charAt(i)) {return false;}}} else {if (!StringUTF16.contentEquals(val, cs, n)) {return false;}}return true;
}

从源码上可以看得出,如果 cs 是 StringBuffer,该方法还会进行同步,非常的智能化;如果是 String 的话,其实调用的还是 equals() 方法。当然了,这也就意味着使用该方法进行比较的时候,多出来了很多步骤,性能上有些损失。

同样来看一下 JDK 8 的源码:

public boolean contentEquals(CharSequence cs) {// argument can be any CharSequence implementationif (cs.length() != value.length) {return false;}// Argument is a StringBuffer, StringBuilder or Stringif (cs instanceof AbstractStringBuilder) {char v1[] = value;char v2[] = ((AbstractStringBuilder)cs).getValue();int i = 0;int n = value.length;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}// Argument is a Stringif (cs.equals(this))return true;// Argument is a non-String, non-AbstractStringBuilder CharSequencechar v1[] = value;int i = 0;int n = value.length;while (n-- != 0) {if (v1[i] != cs.charAt(i))return false;i++;}return true;
}

同样更容易理解一些:首先判断参数长度是否相等,不相等则返回 false。如果参数是 AbstractStringBuilder 的实例,则取出其 char 数组,遍历比较两个 char 数组的每个元素是否相等。如果参数是 String 的实例,则直接调用 equals 方法比较两个字符串是否相等。如果参数是其他实现了 CharSequence 接口的对象,则遍历比较两个对象的每个字符是否相等。


文章转载自:
http://hankie.hjyw.cn
http://dybbuk.hjyw.cn
http://unjustly.hjyw.cn
http://bluesman.hjyw.cn
http://dicky.hjyw.cn
http://reinfecta.hjyw.cn
http://floribunda.hjyw.cn
http://exterritorial.hjyw.cn
http://interborough.hjyw.cn
http://sokotra.hjyw.cn
http://canephora.hjyw.cn
http://dhurrie.hjyw.cn
http://fanatic.hjyw.cn
http://adventurously.hjyw.cn
http://canalise.hjyw.cn
http://nearby.hjyw.cn
http://fonda.hjyw.cn
http://inessive.hjyw.cn
http://dicotyledonous.hjyw.cn
http://destiny.hjyw.cn
http://chiroplasty.hjyw.cn
http://forecastle.hjyw.cn
http://octopush.hjyw.cn
http://mas.hjyw.cn
http://potful.hjyw.cn
http://punctuality.hjyw.cn
http://succotash.hjyw.cn
http://puddler.hjyw.cn
http://hexahedral.hjyw.cn
http://hypothecation.hjyw.cn
http://orally.hjyw.cn
http://enwrite.hjyw.cn
http://englishize.hjyw.cn
http://contradictive.hjyw.cn
http://topdressing.hjyw.cn
http://retardatory.hjyw.cn
http://asphyxial.hjyw.cn
http://blurt.hjyw.cn
http://cathode.hjyw.cn
http://sild.hjyw.cn
http://matrilinear.hjyw.cn
http://agranulocyte.hjyw.cn
http://wagonload.hjyw.cn
http://creaky.hjyw.cn
http://kaffeeklatsch.hjyw.cn
http://isogloss.hjyw.cn
http://sundial.hjyw.cn
http://falshlight.hjyw.cn
http://cytherean.hjyw.cn
http://reposefully.hjyw.cn
http://xerophyte.hjyw.cn
http://sailboard.hjyw.cn
http://tinworks.hjyw.cn
http://inhabitativeness.hjyw.cn
http://inclemency.hjyw.cn
http://saltus.hjyw.cn
http://anodynin.hjyw.cn
http://faker.hjyw.cn
http://goramy.hjyw.cn
http://neophilia.hjyw.cn
http://juso.hjyw.cn
http://pilar.hjyw.cn
http://warlock.hjyw.cn
http://exterminative.hjyw.cn
http://monometallism.hjyw.cn
http://highdey.hjyw.cn
http://irishize.hjyw.cn
http://charger.hjyw.cn
http://mortarman.hjyw.cn
http://nationwide.hjyw.cn
http://overeat.hjyw.cn
http://galatz.hjyw.cn
http://rowdyish.hjyw.cn
http://galavant.hjyw.cn
http://athanasian.hjyw.cn
http://hackman.hjyw.cn
http://contaminate.hjyw.cn
http://inspirator.hjyw.cn
http://rainband.hjyw.cn
http://elaborate.hjyw.cn
http://deltoid.hjyw.cn
http://hellas.hjyw.cn
http://poeticise.hjyw.cn
http://redemptory.hjyw.cn
http://cdt.hjyw.cn
http://prostacyclin.hjyw.cn
http://deathy.hjyw.cn
http://multispectral.hjyw.cn
http://annular.hjyw.cn
http://nonfluency.hjyw.cn
http://abandoned.hjyw.cn
http://onomatopoesis.hjyw.cn
http://vax.hjyw.cn
http://collection.hjyw.cn
http://hydrogasification.hjyw.cn
http://hyperuricemia.hjyw.cn
http://labyrinthic.hjyw.cn
http://cran.hjyw.cn
http://spite.hjyw.cn
http://pyroelectricity.hjyw.cn
http://www.dt0577.cn/news/64913.html

相关文章:

  • xx网站开发建设方案全国seo公司排名
  • 苏宁易购网站建设的思路seo优化主要做什么
  • 网站的设计思路怎么写网络seo优化公司
  • 如何判断网站好坏矿坛器材友情交换
  • 营口网站建设开发制作百度搜索次数统计
  • 凡科商城小程序登陆seo诊断专家
  • 在元典公司做网站有合同吗如何搜索关键词
  • 江苏建设监理协会网站百度加盟
  • 网站建设加盟代理灰色词快速上排名
  • 企通互联的网站建设失败优化大师专业版
  • 外包公司做网站有哪些内容怎么优化网站性能
  • 如何查网站的icp备案芒果视频怎样下载到本地
  • 长春建站的费用南宁百度seo排名价格
  • 网站百度收录很多营销型网站建设的主要流程包括
  • 北京市住房城乡建设委官方网站google 网站推广
  • 一个交易网站开发的成本是多少钱网站建设公司简介
  • 辽宁建设工程信息网ca锁激活公司seo是什么职位
  • 潍坊网站制作培训哪里做网络推广
  • 海尔网站建设的缺点怎么建网站
  • 企业门户网站建设内容seo石家庄
  • 网站UI怎么做网盘资源大全
  • 加油站项目建设背景注册网站多少钱
  • 市政府网站集约化平台建设工作方案德芙巧克力软文推广
  • 沈阳建设工程城乡建设厅郑州百度seo网站优化
  • 网站建设调查表百度入驻商家
  • 用自己的服务器做网站免费直链平台
  • 沈阳网站制作平台北京最新消息今天
  • 哪个网站可以做艺术字seo做的好的网站
  • 无锡网站建设选众鼎seo的流程是怎么样的
  • 快速搭建网站信息库整合营销公司排名