// 测试代码
public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 128; Integer f = 128; Long g = 3l; System.out.println(c == d); System.out.println(e == f); System.out.println(c == (a+b)); System.out.println(c.equals(a+b)); System.out.println(g == a+b); System.out.println(g.equals(a+b)); }
输出结果:
true false true true true false
原因:
1.内存地址对比,但是由于值处于-128~127,因此存储在常量池中,内存地址相同
2.内存地址对比,由于值不在-128~127,因此值存储在堆中,内存地址不同
3.遇到运算符+号,自动拆箱为int类型对比,值相同
4.调用Integer的equals方法,遇到+号,自动拆箱为int类型的3,传入equals方法,自动装箱为Integer类型的3,进行值对比,具体可查看Integer类型的equals方法源码,值相同
5.遇到运算符+ 号,自动拆箱为int,与Long类型对比,自动转型为long(编译时),自动拆箱为long类型对比,值相同
6.遇到运算符+ 号,自动拆箱为int,传入equals方法,自动装箱为Integer类型的3,不属于Long类型,具体可查看Long类型的equals方法源码,返回false
解释一下==和equals的区别
定义 | 对于基本数据类型 | 对于引用数据类型 | |
== | 运算符 | 对比值 | 对比内存地址 |
equals | Object类的方法 | - | 使用==对比,可以看下Object类下的equals方法源码 |
附上源码:
Object equals方法
Integer equals方法
Long equals方法
另外自动转型:
源码:
编译后:
大家好,又见面了,我是你们的朋友全栈君。不同于C++需要编程人员手动释放内存,Java有虚拟机,因此Java不需要程序员主动去释放内存,而是通过虚拟机自身的垃圾回收器(GarbageCollector-GC)来进行对象的回收。Java语言由于有虚拟机的存在,实现了平台无关性,在任意平台都是通过将代码转换为字节码文件,从而在平台下的虚拟机中运行代码的。JVM内存区域分布虚拟机栈:存放每个方法执行时的栈帧,一个方法调用到完成就对应栈帧在虚拟机栈中入栈和出栈的过程。本地方法栈:和虚拟机栈类似,不过是为Java中native方法服务的。平时所说的“栈内存”指的就是虚拟机栈和本地方法栈的合称。程序计数器:当前线程执行字节码的行号指示器,字节码解释器工作依赖于它。占用较小的内存空间,不会出现OOM。堆:即所谓的“堆内存”。JVM所管理最大的一块内存,被所有线程共享。唯一作用就是给对象实例分配内存空间,在分代回收算法中的新生代老年代就在于堆中。方法区(也称为永久代):不在堆中,被各个线程共享,存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。其中包括常量池。另:直接内存,不属
堆表结构headerdata –Aheaderdatadefinedbythestructure PageHeaderData isallocatedinthebeginningofthepage.Itis24bytelongandcontainsgeneralinformationaboutthepage.Themajorvariablesofthestructurearedescribedbelow.pd_lsn –ThisvariablestorestheLSNofXLOGrecordwrittenbythelastchangeofthispage.Itisan8-byteunsignedinteger,relatedtotheWAL(Write-AheadLogging)mechanism.当前页的最后一个修改的lsn号。pd_checksum –Thisvariablestoresthechecksumvalueofthispage.(Notethatthisvariableissupportedinversion9.3orlater;inearlierversions,th
1、下述代码查询model对应数据库中日期等于2018-05-22的数据:queryset=model.objects.all() condtions:{'date':'2018-05-22'} query_res=queryset.filter(**condtions)复制2、下述代码查询model对应数据库中日期小于2018-05-22的数据:queryset=model.objects.all() condtions:{'date__lt':'2018-05-22'} query_res=queryset.filter(**condtions)复制3.总结:条件选取querySet的时候,filter表示=,exclude表示!=。querySet.distinct()去重复__exact精确等于like‘aaa’ __iexact精确等于忽略大小写ilike‘aaa’ __contains包含like‘%aaa%’ __icontains包含忽略大小写ilike‘%aaa%’,但是对于sqlite来
前两天学习了两种非常基础的IO流:字节流和字符流。今天我们要继续学习一些更强大的流:比如能够高效读写的缓冲流;能够转换编码的转换流;能够持久化存储对象的序列化流……等等。不要一看流那么多,感觉很难记,其实真心不难,无论多少流,核心都是两类:InputStream字节输入流,核心方法read(),读硬盘数据输入到内存,对应字符输入流Reader;OutputStream字节输出流,核心方法writer(),写内存数据输出到硬盘,对应字符输出流Writer。所有的流都是以这两种为核心,都是由字节输出流和字节输入流演化而来,正所谓万流归宗就是这个道理。使用方法都是大同小异的,只不过前缀不一样。一、缓冲流Buffered,翻译为缓冲的,所以缓冲流前缀为Buffered。它也叫高效流,顾名思义,其使用起来效率很高,经常会使用到它。它为什么更高效?因为用空间换时间:底层有一个8K缓冲区专门来做这件事,从而缩短时间,更加地高效。拿一个我们现实里的例子:电脑卡顿,我们将内存增加,可以在一定程度上解决卡顿。因为同样是一个程序,以前内存小,只能用100M内存处理这个程序;现在内存大了,专门用200M内存来
配图来自Canva近日,美团再度宣布组织架构调整,成立“优选事业部”,并推出“美团优选”业务,正式进军社区团购赛道。同时,将原“小象事业部”更名为“买菜事业部”,继续发展美团买菜业务。美团这两步组织调整,意在抢滩同城生鲜零售市场。全面布局同城零售艾媒咨询数据显示,中国生鲜电商行业整体保持稳定增长的发展态势,2019年中国生鲜电商市场规模达1620.0亿元,预计2020年生鲜电商行业市场规模达到2638.4亿元。随着电商渗透率加强、用户习惯养成,及新冠疫情时期出现的需求激增,中国生鲜电商平台已成为新兴成长市场。负责优选事业部的美团高级副总裁陈亮曾表示,“食杂零售行业尚处在快速发展变化的早期阶段,线上化率低,市场规模巨大。美团将继续探索和更新业务模式,优化运营,提高产品和服务质量,以满足不同群体、不同城市、不同层次的差异化消费需求。”“美团优选”的上线也已经不是美团第一次在同城食杂零售行业发力了。之前,美团还推出了“美团买菜”业务和“菜大全”业务,分别针对北上广深等超一线城市和武汉、成都、南京等准一线或者二线城市。如今推出的“美团优选”业务,则重点面向下沉市场,和“美团买菜”及“菜大全”形
本文2019年中原创首发于博客园,当时使用CSRedisCore的排障思路引起很大反响,当时被张队公众号翻牌,本次转回公号。背景上次RedisMQ分布式改造之后,编排的容器稳定运行一个多月,昨天突然收到ETL端同事通知,没有采集到解析日志。赶紧进服务器dockerps查看容器:用于数据接收的ReceiverApp容器挂掉了;尝试dockercontainerstart[containerid],几分钟后该容器再次崩溃。Redis连接超限dockerlog[containerid]查看容器日志:显示连接Redis服务的客户端数量超限。CSRedis.RedisException:ERRmaxnumberofclientsreached.Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] ExecutedactionEqidManager.Controllers.EqidController.BatchPutEqidAndProfileIds(EqidReceiver)in7.1767ms fail:Microsoft.
服务治理:SpringCloudEureka在微服务架构中,服务治理是最为基本、最为核心的模块,它主要用来实现各个微服务实例的自动注册与发现。在互联网时代初期,微服务还未盛行之时,构建的服务完全可以使用静态配置文件来维护服务实例清单,根据实例清单来完成服务的调用,随着业务逐渐繁杂,手动维护服务实例清单已经无法满足需求,那么就需要构建一套自动维护服务实例清单的系统,该系统支持动态维护服务实例清单,当服务实例发生变化时,能及时通知客户端来应对服务实例的变化,它围绕服务实例注册与发现,实现自动化管理。SpringCloudEureka是SpringCloudNetflix微服务套件中的一部分,它基于NetflixEureka进行了二次封装,主要负责完成微服务架构中的服务治理功能。NetflixEureka包含了服务端组件和客户端组件,对于Eureka服务端,我们常常称之为服务注册中心,它与其他注册中心一样,支持高可用配置,各个分片依赖强一致性原则提供了良好的服务实例可用性,当某个分片发生故障,那么Eureka会进入自我保护状态,当分片恢复功能的时候,也会实时将其他分片的服务实例同步到恢复的分
题意给定一颗二叉搜索树,重新进行排序,使其根节点是最小值,且每个节点都没有左子树,只有一个右子树,最终还要保持该树是一颗二叉搜索树.例1: 给予树: 5 /\ 36 /\\ 248 //\ 179 输出: 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9复制解法使用中序遍历即可。/** *Definitionforabinarytreenode. *publicclassTreeNode{ *intval; *TreeNodeleft; *TreeNoderight; *TreeNode(intx){val=x;} *} */ classSolution{ privateTreeNoderesult=newTreeNode(0); privateTreeNodedummy=result; publicTreeNodeincreasingBST(TreeNoderoot){ if(root==null){ returnnull; } increasingBST(root.left); dummy.right=newTreeNode(root.val); dumm
最近在整理我写的几个服务器控件,发出来与大家共享吧。我写的自定义服务器控件呢分为两个类,一是“简单继承”控件,就是继承框架里的控件然后加点属性了、事件了什么的。二是“功能”控件,简单的说那是符合控件,但是呢是以实现一种功能为目的地。这种控件要实现某一种功能,比如分页的功能,添加、修改数据的功能,查询的功能。原先呢还不会使用接口了什么的,所以呢代码写得有点不太“好看”,现在使用接口、继承了什么的来整理一下。先发一个“文本框”的吧,就是继承系统的TextBox,然后加上几个属性、方法。属性:TextTrim 返回.Text.Trim()TextTrimNone返回.Text.Trim.Replace("'","")CheckDataType设置文本框的验证类型。CheckDataReg 设置文本框的验证用的正则表达式。CheckErrorMessage设置当没有通过验证时显示给客户的提示信息。属性(接口):ControlKind 返回控件的类型。函数(接口):GetValue()获取文本框的值,默认返回 TextTrimGetValue(B
此文起因 有园友私信我探讨关于博客园模拟登录的事,年前也玩了一段时间的node(详情可以参考我的node项目集https://github.com/hanzichi/funny-node厚着脸皮求star),做之前想的可能只是一次简单的post,尝试下来完成后还是有了不少收获。为了能让后人有个参考,遂成此文。 登录抓包 闲话少说,既然是模拟登录,我们来看看登录过程都发生了什么。 打开登录页面(http://passport.cnblogs.com/user/signin?ReturnUrl=http://passport.cnblogs.com/),填入用户名和密码,点击登录后,我们很容易地抓到了登录包。 先看返回头: 后续的实践中,我用回帖操作来证明已经完成登录。抓取回帖的包,发现回帖操作需要携带一个key为.CNBlogsCookie的cookie识别身份。又发现,只要一次登录后将浏览器中的该cookie取出,就能模拟该用户了。我将客户端的key为.CNBlogsCookie的cookie取出,写下如下代码: superagent .post('http://www.cnblog
LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。后期出现问题恢复数据也比较麻烦。 概念: ①PE(PhysicalExtend)物理拓展 ②PV(PhysicalVolume)物理卷 ③VG(VolumeGroup)卷组 ④LV(LogicalVolume)逻辑卷 特点: LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性! 原理: (1)物理磁盘被格式化为PV,空间被划分为一个个的PE (2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内 (3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘 (4)LV现在就直接可以格式化后挂载使用了 (5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据 工作流程: 磁盘分区-->创建物
之前有一个问题一直困扰着我,就是一个变量出了作用域,我以为这个变量的内存就被回收了,其实不是这样的,昨天问了一个高手,才豁然开朗,自己在看相关代码的反汇编代码,才知道原来真是这样就。这个问题,我想简单的说一下内存的分配VS回收&构造函数VS析构函数之间的关系。 我的疑问:为什么p出了作用域,指向p的ptr还能读到p中arr的内容,难道p出了作用域,还没有析构? 下面的内容会解答这个疑问,先说说跟这篇文章有关的内容。 可能是因为平时习惯的原因,我们在实例化一个对象的时候,往往是一条语句实现两个功能:1分配内存;2调用构造函数 classA { public: A() { i=0; j=0; } ~A(){} inti; intj; }; Aa1; A*a2=newA();复制 这两中方式都是一步实现两个操作,分配内存和调用构造函数,如果A没写构造函数,即没有构造函数(编译器也不会自动生成),当然就不需要调用构造函数。 其实这两步是可以分开的,Aa1;这句分开不了这两步,但A*a2=newA();是可以分开,同等的代码如下: void*memory=operatornew
有数据头的复杂数据该如何解析呢? 简单的说完了,铺垫也铺完了,来看一看复杂的吧: { "code":200, "msg":"OK", "muser":[ { "name":"zhangsan", "age":"10", "phone":"11111", "email":"11111@11.com" }, { "name":"lisi", "age":"20", "phone":"22222", "email":"22222@22.com" }, ... ] }复制 这里就不再是纯数组数据了,还有两个凑数的不知道干嘛用的字段,这里也有数据头,之前用的是笨方法,现在来真正见识一下GSON的威力吧。 第一步根据JSON建立Bean,注意这里的Bean是返回所有字段,因为GSON能直接解析成List,所以Bean是下面这样的,同样把占地方的get/set省略: /** *Createdbyxiaruion2016/8/30. *返回所有结果的Bean */ publicclassResultBean{ //注意变量名与字段名一致 privateintcode; privateStringmsg
前言? 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 前文内容? Python爬虫入门教程01:豆瓣Top电影爬取 Python爬虫入门教程02:小说爬取 Python爬虫入门教程03:二手房数据爬取 Python爬虫入门教程04:招聘信息爬取 Python爬虫入门教程05:B站视频弹幕的爬取 Python爬虫入门教程06:爬取数据后的词云图制作 Python爬虫入门教程07:腾讯视频弹幕爬取 Python爬虫入门教程08:爬取csdn文章保存成PDF PS:如有需要Python学习资料以及解答的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 基本开发环境? Python3.6 Pycharm wkhtmltopdf 相关模块的使用? re requests concurrent.futures 安装Python并添加到环境变量,pip安装需要的相关模块即可。 一、?明确需求 现在聊天谁还不发几个表情包?聊天时,表情包是我们重要的工具,更是拉进小伙伴们距离的好帮手,当聊天陷入尴尬境地时
第一章 1软件开发不同阶段: 1、玩具阶段 2、业余爱好阶段 3、探索阶段 4、成熟的产业阶段 2软件工程是什么: 1、软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程 2、软件工程包括软件需求分析、软件设计、软件构件、软件测试和软件维护这五个领域 3软件的特殊性: 1、复杂性 2、不可见性(抽象) 3、易变性 4、服从性 5、非连续性 第二章 1好的单元测试德标准: 1、单元测试应该在最基本的功能/参数上验证程序的正确性 2、单元测试必须由最熟悉代码的人来写 3、单元测试过后,机器状态保持不变 4、单元测试要快 5、单元测试应该产生可重复、一直的结果 6、独立性---单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性 7、单元测试应该覆盖所有代码路径 8、单元测试应该集成到自动测试的框架中 9、单元测
仿春雨医生安卓app(android) 目前APP处与开发完善中,可过程序自下载更新,如有BUG报错,请联系QQ 1310651206 支持安卓(android)、IOS(IPHONE),PAD 开发技术:IOS,Android,XMPP消息推送,HTML5,PHP,MVC,Objective-C,C++,Jquery,AJAX,JSON,Mysql,Jquerymobile 服务器环境 CENTOS6.5,NGINX1.8,MYSQL5.6 下载地址:http://download.csdn.net/download/ytjjyy/4023471 解决方案下载:点击此处 用户需求汇总 简介功能如下: 1、 病例库病因、临床表现、预防、治疗(支持语音搜索) 2、 药物百科主治功能、使用事项、市场参考售价、购买(支持语音搜索) 3、 门诊预约城市、医院、科室、专家、手续费 4、 医院、药店(地图、合作院医、药店)医院信息、科室信息、专家信息、专家排班 5、 化验单解读三常规(血常规、尿常规、便常规)肝
转载自【优雅代码】10-拒绝if/else数据校验及转换 背景 避免if、else,只用注解完成校验及格式化 注解边界值 官方注解 给接口添加@Validated注解(其可以使用分组更为优秀) @PostMapping("testFront") publicResponseVO<FrontRepVO>testFront(@Validated@RequestBodyFrontReqVOfrontReqVO){ returnnewResponseVO<>(); } 复制 使用javax.validation.constraints下的注解,该注解在非controller中 publicclassFrontReqVO{ @NotNull privateStringname; @Size(min=1) privateStringname2; //校验去除空格后不可为空 @TrimNotNull(groups={Default.class,Insert.class}) //序列化,去除空格 @JsonSerialize(using=TrimNotNullJson.cl
要在Window系统或者其它系统里面运行另外的系统,就要用到虚拟机了。虚拟机的下载非常简单, 设置也不复杂。这里我们下载VMwareStation12虚拟机。 下载的虚拟机是需要激活的。不然只能使用30天。在网上搜到一个VM12企业版的,亲测有效! VMware12专业版永久许可证密钥: 5A02H-AU243-TZJ49-GTC7K-3C61N VMwareWorkStation12下载链接: http://rj.baidu.com/soft/detail/13808.html VMwareWorkStation12配置参考: http://tieba.baidu.com/p/3177840570 1.点击创建新的虚拟机 2.选择自定义(高级)—下一步 3.默认Workstation12.0—下一步 4.稍后安装操作系统(S)—下一步 5.我们是安装Linux,选择自己要安装的Linux版本,如果没有的话,选默认的也行。 6.接