首页 文章 精选 留言 我的

精选列表

搜索[渲染问题],共10000篇文章
优秀的个人博客,低调大师

1.“==”,”equals()”,”hashCode()”等的问题

“==”,”equals()”,”hashCode()”这三个是不同而又有密切联系的概念,下面会梳理相关的知识点进行辨析。 一、”==”是运算符,equals()和hashCode()是函数 二、”==”操作符的用法 #1.如果==的两边都是基本类型变量、包装类对象所组成的表达式,==用于比较两边的表达式的值是否相等——只要两边的表达式的值相等,即使数据类不同,该运算符也会返回true。例如'a' == 97.0,将会返回 true。 #2如果==的两边是引用类型的变量,==用于判断这两个引用类型的变量是否引用同一块内存,只有当它们引用同一块内存时,==才会返回 true。 三、”equals()”函数的用法 equals()则是一个 java.lang.Object 类的一个方法,因此任何 Java 对象都可调用该方法 与其他对象进行比较。java.lang.Object 类的 equals 方法的实现代码如下: boolean equals(Object o) { return this == o; } 从上面代码可以看出,如果一个类没有重写 java.lang.Object 的 equals()方法时,此时 equals()方法的比较结果与==的比较结果是相同的。 但 Java 允许任何类重写 equals()方法,重写该方法就是让程序员来自己决定两个对象相 等的标准——极端的情况下,我们完全可以设计出 Person 对象与 Dog 对象 equals()比较返回 true 的情况——当然一般不会这么设计。 实际上重写 equals()方法时通常会按如下格式: public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (pass == null) { if (other.pass != null) return false; } else if (!pass.equals(other.pass)) return false; return true; } 上面重写 equals()方法用于判断两个 Person 对象是否“相等”,程序只要两个 Person 对 象的 name、pass 相等,程序就可以把这两个 Person 对象当成相等——这是系统业务决定的。 如果业务需要,我们也可以增加更多的参与判断的 Field,当然也可以只根据 name 进行判断 ——只要两个 Person 的 name 相等,就认为两个 Person 相等,这都是由系统的业务决定。 总结起来就是一句话:开发者重写 equals()方法就可以根据业务要求来决定两个对象是 否“相等”。 四、”equals()”和“hashCode()”的不同作用 hashCode()方法与 equals()方法相似,都是来自 java.lang.Object 类的方法,都允许用户定义的子类重写这两个方法。 一般来说,equals()这个方法是给用户调用的,如果你想根据自己的业务规则来判断两个对象是否相等,你可以重写 equals()方法。简单来讲,equals 方法主要是用来判断从表面上看或者从内容上看,两个对象是不是相等。 而 hashCode()方法通常是给其他类来调用的,比如当我们要把两个对象放入 HashSet 时, 由于 HashSet 要求两个对象不能相等,而 HashSet 判断两个对象是否相等的标准是通过equals()比较返回 false、或两个对象的 hashCode()方法返回值不相等——只要满足任意一个 条件都可会认为两个对象不相等。 从这个角度来看,我们可以把 hashCode()方法的返回值当成这个对象的“标识符”,如果两个对象的 hashCode()相等,即可认为这两个对象是相等的。因此当我们重写一个类的 equals()方法时,也应该重写它的 hashCode()方法,而且这两个方法判断两个对象相等的标 准也应该是一样的。 比如两个对象值相同(x.equals(y) == true),但却可以有不同的 hashCode,因为 equals()方法可以由开发者重写,hashCode()方法也可以由开发者来重写,因此它们是否相等并没有必然的关系。 五、Set中重复元素的判断 Set 只是一个接口,它的不同实现类判断元素是否相等的标准是不同的。笼统地说,Set 里的元素是不能重复的,判断元素重复。 对于 HashSet 而言,判断两个对象是否相等是通过 equals()和 hashCode()方法,只要两个对象通过 equals()比较返回 false、或两个对象的 hashCode()不相等,那么 HashSet 就会把它们当成不相同。 对于TreeSet而言,判断两个对象相等的唯一标准是:两个对象通过compareTo(Object obj)比较是否返回 0,与 equals()方法无关。只要两个对象通过 compareTo(Object obj)比较没有返回 0,Java 就会把它们当成两个对象处理——这一点是很多人容易误解的,不过我们可以通的一个示例来说明: class Z implements Comparable { int age; public Z(int age) { this.age = age; } // 重写 equals()方法,总是返回 true public boolean equals(Object obj) { return true; } // 重写 hashCode()方法,总是返回 1 public int hashCode() { int h = 1; return h; } // 重写了 compareTo(Object obj)方法,总是返回正整数 public int compareTo(Object obj) { return 1; } } public class TreeSetTest2 { public static void main(String[] args) { TreeSet set = new TreeSet(); Z z1 = new Z(6); set.add(z1); // 输出 true,表明添加成功 System.out.println(set.add(z1)); // ① // 下面输出 set 集合,将看到有两个元素 System.out.println(set); // 修改 set 集合的第一个元素的 age 变量 ((Z) (set.first())).age = 9; // 输出 set 集合的最后一个元素的 age 变量,将看到也变成了 9 System.out.println(((Z) (set.last())).age); } } true [practice.equals.Z@1, practice.equals.Z@1] 9 上面程序中两个Z对象通过equals()比较总会返回true,但通过 compareTo(Object obj)比较总是不会返回 0,因此两次向 TreeSet 中添加同一个元素,TreeSet会把它们当成不同的对象进行处理,最后 TreeSet 集合中会显示有两个对象,但实际上是同一个对象。

优秀的个人博客,低调大师

阿里云人脸识别服务续费问题

概述 在使用阿里云人脸识别服务过程中,因为新老接口目前都是可用的状态,但是官方文档对这块没有明确的说明,导致很多用户在使用过程中不清晰,且续费容易出现混乱。这里针对这种情况做一个说明,方便用户明确自己使用的服务,后续服务到期后能够及时进行续费。 Step By Step 1、首先确认自己使用的是老的接口还是新的接口,基于请求地址判断 参考链接。 2、新的接口 2.1 变更及续费 2.2 过期后需要重新开通购买 注意:过期后重新购买历史数据不会清除,可以继续使用。 2.3 成功购买后使用参考 2.4 新接口费用相关说明 目前新接口仅支持按照QPS(每秒钟可以调用接口的次数上限)预付费购买。 特别注意:优惠活动:新用户享受人脸识别全部服务免费1个月试用,试用期每个服务QPS上限为2,超过2QPS即按全额收费。这个需要首次购买的时候使用,如果首次购买有接口QPS为0,再次变更后该接口即不再享有免费额度,第一次购买使用时请特别注意。 3、老的接口 3.1 购买及开通地址 注意:老的接口支持购买资源包,没有资源包默认按照按量付费计费(单价:0.002500元/API)。 3.2 控制台API快速测试地址 控制台使用参考链接。 3.3 开发调用参考链接:阿里云人脸识别综述 参考链接 阿里云新版人脸识别综述

优秀的个人博客,低调大师

阿里云人脸识别典型问题处理

1.子账号使用需要给子账号授权AliyunYundunCloudAuthFullAccess 2.报没有权限(NoPermissionError)的错误需要注意:目前人脸识别有两个版本 接口 endpoint 功能 老版本 dtplus-cn-shanghai.data.aliyuncs.com 人脸检测定位、人脸属性识别、人脸对比 新版本 face.cn-shanghai.aliyuncs.com 人脸检测定位、人脸属性识别、人脸对比、人脸检索(1:N人脸查找) 目前新版本已经正式商业化了,如果之前没有购买新版本,但代码还在调用,就有可能报NoPermissionError的。目前新版本仅支持按QPS预付费所以,如果使用人脸检测定位、人脸属性识别、人脸对比这三个接口,可以继续使用老版本,老版本目前支持按量付费和资源包的形式。但如果要使用人脸检索(1:N)目前只支持按QPS预付费,需要购买以后才可以使用,QPS要大于0 3.一个账户的全部图片的上限是5万,但Group、Person没有限制 4.Q:使用效率,调用需要多久?A:这个和具体图片有关系,比如待检测的图片中存在多个人脸,时间就会久一点,一般几秒钟就可以返回结果的。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册