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

做网站时会留下ip地址吗肇庆seo优化

做网站时会留下ip地址吗,肇庆seo优化,宁波模板建站源码,做网页设计一个月能挣多少前言相信很多读者关于和equals懂了又懵#xff0c;懵了又懂#xff0c;如此循环#xff0c;事实上可能是因为看到的博客文章之类的太多了#xff0c;长篇大论#xff0c;加上一段时间的洗礼之后就迷路了。本篇文章再一次理清楚。当然如果觉得本文太啰嗦的话#xff0c;当…前言相信很多读者关于和equals懂了又懵懵了又懂如此循环事实上可能是因为看到的博客文章之类的太多了长篇大论加上一段时间的洗礼之后就迷路了。本篇文章再一次理清楚。当然如果觉得本文太啰嗦的话当然我也考虑到了因为我也不喜欢长篇大论啰里啰嗦比比叨叨胡搅蛮缠的文章毕竟大家入门java 的时候就知道个大概了因此记住一句话就好了equals本身和 没有区别对于基本数据都是比较值对于引用类型则比较的是所指向的对象的地址其他类在继承Object类之后对equals方法重写所以表现的是比较里面的内容具体比较的则要看自己是怎么重写的。好了如果有兴趣的就看下文当然不感兴趣的大佬可以点个赞直接走了不用看了会了还看个*啊楼主你个憨憨皮一下很开心1、原生的equals()方法本身与 “ ”没有任何区别从java语言本质上来讲属于JAVA语言的运算符而equals则是根类Object的一个方法。关于Object类的equals()方法我们可以看看其源码/* * param obj the reference object with which to compare. * return {code true} if this object is the same as the obj * argument; {code false} otherwise. * see #hashCode() * see java.util.HashMap */public boolean equals(Object obj) { return (this obj);}是的equals底层其实就是“ ”也就是说原生的equals()方法本身与 “ ”没有任何区别唯一的区别则是基本类型没有继承Object类所以基本类型没有equals()方法也就是说基本类型只能使用“ ”判断值是否相等。既然原生的equals()方法本身与 “ ”没有任何区别那么我们对运算符 “ ”的使用有所了解即可运算符 “ ”其具体作用是用来比较值是否相等这里分两中情况1、基本数据类型的变量则直接比较其存储的 “值”是否相等2、引用类型的变量则比较的是所指向的对象的地址是否相等到这里我们可以初步确认原生的equals()方法本身与 “ ”没有任何区别作用正是如上。下面是我们的一个专栏 《Java 进阶集中营》有兴趣的朋友们可以关注一下JAVA 进阶集中营​zhuanlan.zhihu.com2、equals()方法的重写但是重点来了因为对于equals()方法我一直在强调原生二字。是的让很多初学者疑惑的点就在这里equals()方法的重写在JDK中诸如String、Date等类对equals方法进行了重写以String为例这里感兴趣的读者可以一起看看String类中重写的equals()方法当然跳过也问题不大/** * Compares this string to the specified object. The result is {code * true} if and only if the argument is not {code null} and is a {code * String} object that represents the same sequence of characters as this * object. * * param anObject * The object to compare this {code String} against * * return {code true} if the given object represents a {code String} * equivalent to this string, {code false} otherwise * * see #compareTo(String) * see #equalsIgnoreCase(String) */ public boolean equals(Object anObject) { if (this anObject) { return true; } 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; }从源码中可以看出首先该方法判断比较的是所指向的对象地址是否相等如果相同直接返回true如果不相同进行下一个if判断第二个if判断大致意思则是比较其存储的 “值”是否相等也就是比较内容值相同就返回true比如两个new String对象“AAA”和“AAA”这里虽然对象地址不相等但是内容相等所以同样返回true。这里我就想给各位出个典型的String例子了public static void main(String[] args) { String a 宜春; String b new String(宜春); String c b; //注意这里是引用传递意思是c也指向b指向的内存地址 System.out.println(a b); //false System.out.println(a c); //false System.out.println(b c); //true System.out.println(a.equals(b)); //true System.out.println(a.equals(c)); //true System.out.println(b.equals(c)); //true }【特别注意String类型属于引用类型】解析1a b意思是地址指向的是同一块地方吗很明显不一样。2a c意思是地址指向的是同一块地方吗很明显不一样。3b c意思是地址指向的是同一块地方吗很明显内容一样所以为true。4a.equals( b )意思是地址指向的内容一样嘛一样。4a.equals( c )意思是地址指向的内容一样嘛一样。4b.equals( c )意思是地址指向的内容一样嘛一样。当然你可能还是有点疑惑那么结合下面这张图再理解上面的解析你可能就恍然大悟了OK。现在能理解嘛你你你......不用回答我知道你理解了理直气壮。当然值得注意一点的是String中intern()方法先看一段程序public static void main(String[] args) { String a 宜春; String b new String(宜春); bb.intern(); System.out.println(a b); //true System.out.println(a.equals(b)); //true }intern方法的意思是检查字符串池里是否存在如果存在了那就直接返回为true。因此在这里首先a会在字符串池里面有一个然后 b.intern()一看池子里有了就不再新建new了直接把b指向它。3、为什么要重写equals方法不知道大家有没有想过这个问题。当然答案也是很简单的因为程序员比较字符串一般比较其内容就好了比较内存地址是不是同一个对象就好像没啥意义了重写equals方法就很方便用来比较字符串的内容了。其实除了诸如String、Date等类对equals方法进行重写我们在实际开发中我们也常常会根据自己的业务需求重写equals方法.举个栗子我们的需求就是如果两个学生对象姓名、身份证号、性别相等我们认为两个学生对象相等不一定需要学生对象地址相同。学生A的个人信息姓名如花,性别:女身份证号123住址广州学生A对象地址为0x11 学生B的个人信息姓名如花,性别:女身份证号123住址深圳学生A对象地址为0x12这时候如果不重写Object的equals方法那么返回的一定是false不相等这个时候就需要我们根据自己的需求重写equals()方法了。具体equals方法的重写代码如下// 重写equals方法 Override public boolean equals(Object obj) { if(!(obj instanceof Student)) { // instanceof 已经处理了obj null的情况 return false; } Student stuObj (Student) obj; // 对象地址相等 if (this stuObj) { return true; } // 如果两个对象姓名、身份证号码、性别相等我们认为两个对象相等 if (stuObj.name.equals(this.name) stuObj.sex.equals(this.sex) stuObj.IDnumber.equals(this.IDnumber)) { return true; } else { return false; } }开发中这样设计才能符合我们的生活到这里我就不信了你还搞不定和equals可是一涉及重写equals方法的同时又衍生了下面一个问题。4、重写equals方法之后要不要重写hashCode()方法当然这个问题要讨论又要长篇大论哔哔一大堆了有空写一篇这样的文章吧专门讨论讨论这个问题当然园子里的大佬们也写了一大堆可以自行去了解了解。本篇文章简单聊聊点到即可。首先hashCode()方法是Object类的一个方法源码如下/** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {link java.util.HashMap}. * p * The general contract of {code hashCode} is: * ul * liWhenever it is invoked on the same object more than once during * an execution of a Java application, the {code hashCode} method * must consistently return the same integer, provided no information * used in {code equals} comparisons on the object is modified. * This integer need not remain consistent from one execution of an * application to another execution of the same application. * liIf two objects are equal according to the {code equals(Object)} * method, then calling the {code hashCode} method on each of * the two objects must produce the same integer result. * liIt is emnot/em required that if two objects are unequal * according to the {link java.lang.Object#equals(java.lang.Object)} * method, then calling the {code hashCode} method on each of the * two objects must produce distinct integer results. However, the * programmer should be aware that producing distinct integer results * for unequal objects may improve the performance of hash tables. * /ul * p * As much as is reasonably practical, the hashCode method defined by * class {code Object} does return distinct integers for distinct * objects. (This is typically implemented by converting the internal * address of the object into an integer, but this implementation * technique is not required by the * Javafont size-2supTM/sup/font programming language.) * * return a hash code value for this object. * see java.lang.Object#equals(java.lang.Object) * see java.lang.System#identityHashCode */ public native int hashCode();可以看出hashCode()方法返回的就是一个int数值从方法的名称上就可以看出其目的是生成一个hash码。hash码的主要用途就是在对对象进行散列的时候作为key输入据此很容易推断出我们需要每个对象的hash码尽可能不同这样才能保证散列的存取性能。事实上Object类提供的默认实现确实保证每个对象的hash码不同在对象的内存地址基础上经过特定算法返回一个hash码。Java采用了哈希表的原理。哈希算法也称为散列算法是将数据依特定算法直接指定到一个地址上。初学者可以这样理解hashCode方法实际上返回的就是对象存储的物理地址实际上不是。想要知道hashCode的作用必须要先知道Java中的集合。Java中的集合List的元素是有序的元素可以重复Set元素无序但元素不可重复。这我们都清楚。但是你有没有想过这样一个问题要想保证元素不重复可两个元素是否重复应该依据什么来判断呢每错这里就是用Object.equals方法了。但是如果每增加一个元素就检查一次那么当元素很多时后添加到集合中的元素比较的次数就非常多了。也就是说如果集合中现在已经有1000个元素那么第1001个元素加入集合时它就要调用1000次equals方法。这显然会大大降低效率。那怎么解决呢我们可以在Java集合框架中得到验证。由于HashSet是基于HashMap来实现的所以这里只看HashMap的put方法即可。源码如下public V put(K key, V value) { if (table EMPTY_TABLE) { inflateTable(threshold); } if (key null) return putForNullKey(value); int hash hash(key); //这里通过哈希值定位到对象的大概存储位置 int i indexFor(hash, table.length); for (EntryK,V e table[i]; e ! null; e e.next) { Object k; //if语句中先比较hashcode再调用equals()比较 //由于“”具有短路的功能只要hashcode不同也无需再调用equals方法 if (e.hash hash ((k e.key) key || key.equals(k))) { V oldValue e.value; e.value value; e.recordAccess(this); return oldValue; } } modCount; addEntry(hash, key, value, i); return null;}正如源码中注释所述“”具有短路的功能只要hashcode不同也无需再调用equals方法。是的Java采用了哈希表的原理。 哈希表具有优越的查询性能就像九九乘法表2*36你能很轻易知道但是哈希表难免还会出现哈希冲突,只是概率极低。如此设计这样一来当集合要添加新的元素时先调用这个元素的hashCode方法就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素它就可以直接存储在这个位置上不用再进行任何比较了如果这个位置上已经有元素了就调用它的equals方法与新元素进行比较相同的话就不存不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了几乎只需要一两次。因此并不是重写了equals方法就一定要重写hashCode方法只有用到HashMap,HashSet等Java集合的时候重写了equals方法就一定要重写hashCode方法。用不到哈希表仅仅重写equals()方法也OK的。Java官方建议 重写equals()就一定要重写hashCode()方法。毕竟实际开发场景中常常用到Java集合5、eqauls方法和hashCode方法关系Java对于eqauls方法和hashCode方法是这样规定的1、如果两个对象equals为true 他们的hashcode一定相等。2、如果两个对象equals为false他们的hashcode有可能相等。3、如果两个对象hashcode相等equals不一定为true。4、如果两个对象hashcode不相等equals一定为false。最后若有不足或者不正之处欢迎指正批评感激不尽
http://www.sadfv.cn/news/127497/

相关文章:

  • 一个网站需要几个人做网站风格设计描述
  • 网站开发项目教程任务分解河北邯郸邮政编码
  • 旅游公司网站制作做任务领佣金的网站源码
  • 佛山网站建设公司哪家最好搭建网站上传文件
  • 微网站开发入门做网站大概要多少
  • 在哪里查关键词排名sem和seo是什么
  • 制作网站软件下载深圳网站有哪些
  • 集团公司做网站佛山建设外贸网站公司
  • 江苏省住房和城乡建设局网站首页南宁seo推广
  • 郑州建设网站费用网站基础上添加建设方案模板
  • 信用网站一体化建设方案网站制作找哪个
  • 学做网站论坛课程如何选择做网站
  • 软件下载网站排行建设局怎么进
  • 成都企业建站公司在线咨询做网站开发的公司销售
  • 网站设计的原始资料互联网建筑公司
  • ajax网站墨猴seo排名公司
  • 涡阳网站优化创意活动策划网站
  • 竖排导航网站网站的宣传与推广
  • 广西南宁市网站建设服务中心十大免费ae模板网站
  • 灌南住房和城乡建设局网站贸易公司寮步网站建设极致发烧
  • 网站分站系统拓者室内设计官网拓者室内设计官网
  • 兰州网站建设报价怎么做挖矿网站
  • app开发公司倒闭了怎么办360优化大师旧版本
  • 秦皇岛pc端网站建设搜狗推广登陆
  • 做外单要上什么网站广陵建设局网站
  • 网站建设 公司 广州wordpress更改主题
  • 百度网页打不开无法访问怎么办网站速度优化方案
  • 网站图片地址怎么做容桂网站智能推广新闻
  • 微网站二级页面怎么做前端搜索网站引擎怎么做
  • 河南城乡建设厅网站证书查询优设网官网教程