object

关于hashcode和equals方法说明

扶醉桌前 提交于 2020-01-08 11:11:31
一、前言 我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等时,那么与对象相关的对象句柄、对象头、对象实例数据、对象类型数据等也是完全一致的,所以我们可以通过比较对象的地址来判断是否相等。 二、Object源码理解 对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object类的源码我们知道,默认的equals 判断的是两个对象的引用指向的是不是同一个对象;而hashcode也是根据对象地址生成一个整数数值; 另外我们可以看到Object的hashcode()方法的修饰符为native,表明该方法是否操作系统实现,java调用操作系统底层代码获取哈希值。 public class Object { public native int hashCode(); /** * Indicates whether some other object is "equal to" this one. * <p> * The {@code equals} method implements an equivalence relation * on non-null object references: * <ul> * <li>It is <i>reflexive</i>: for any

SVG 画图

陌路散爱 提交于 2020-01-08 11:01:02
SVG 在线画图工具: https://svg.haowen100.com/ 把画的图片代码保存成svg文件,加载 http://www.bejson.com/convert/image_to_svg/ https://www.aconvert.com/cn/image/png-to-svg/ 参考一 SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。 SVG 文件可以直接插入网页,成为 DOM 的一部分,然后用 JavaScript 和 CSS 进行操作。 <!DOCTYPE html> < html > < head > </ head > < body > < svg id = "mysvg" xmlns = " http://www.w3.org/2000/svg " viewBox = "0 0 800 600" preserveAspectRatio = "xMidYMid meet" > < circle id = "mycircle" cx = "400" cy = "300" r = "50" /> < svg > </ body > </ html > 上面是 SVG

JavaSE笔记6.12-面向对象-Object类

不想你离开。 提交于 2020-01-08 09:55:46
1. 概述 类Object是类层次结构根类,每个类都使用Object作为超类。 所有对象(包括数组)都实现这个类的方法。 class Demo //extends Object { //除了有默认构造函数 //还继承了类Object的所有方法 } 这里主要总结Object类中的三个常用方法:equals()、toString()、hashCode()。 2. equals() 2.1 基本应用 比较的是地址值 boolean equals(Object obj) 指示一些其他对象是否等于此 class Demo //extends Object { //除了有默认构造函数 //还继承了类Object的所有方法 } class ObjectDemo { public static void main ( String [ ] args ) { Demo d1 = new Demo ( ) ; Demo d2 = new Demo ( ) ; //d2和d1的内存空间不同 Demo d3 = d1 ; //d3和d1的内存空间相同 //equals的作用与==相同 System . out . println ( d1 . equals ( d2 ) ) ; System . out . println ( d1 == d2 ) ; System . out . println (

js之深浅克隆

廉价感情. 提交于 2020-01-08 04:18:54
1、克隆的概念   浅度克隆:原始类型为值传递,对象类型仍为引用传递。   深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。 2. //数值克隆的表现 var a="1"; var b=a; b="2"; console.log(a);// "1" console.log(b);// "2" //字符串克隆的表现 var c="1"; var d=c; d="2"; console.log(c);// "1" console.log(d);// "2" //字符串克隆的表现 var x=true; var y=x; y=false; console.log(x);// true console.log(y);// false//对象类型 var m=function(){alert(1);}; var n=m; n=function(){alert(2);}; console.log(m());//1 console.log(n());//2经过对象克隆以后,我修改oNew的地址,发现原对象oPerson也被修改了。这说明对象的克隆不够彻底,那也就是说深度克隆失败! 3、深克隆的实现   为了保证对象的所有属性都被复制到,我们必须知道如果for循环以后,得到的元素仍是Object或者Array,那么需要再次循环

【Springboot】Springboot2 集成 redis 踩坑

我的未来我决定 提交于 2020-01-08 04:09:15
今天用Springboot2集成redis的时候,一开始是用以前的方法出了很多问题。一查才知道Springboot2使用 lettuce 作为默认的redis client。所以配置文件里别配置jedis的参数了,配置lettuce pool。 还想用 jedis 的需要自己在 pom 文件手动添加 jedis client 的依赖。 redis: database: 0 host: 192.168.1.210 port: 6379 password: password lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 完了还有一个问题就是会报一个错误, 大概就是 ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig 需要手动添加 commons pool 的依赖 <!-- redis lettuce pool 需要这个依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.6.2</version> </dependency> 最后一个问题就是在自定义

JIT

╄→гoц情女王★ 提交于 2020-01-07 22:57:40
热点代码:被多次调用的方法或循环体。(大概1w次?) jvm两种运行模式: 执行java -version 可以看到Server或client 模式 ,其中server 模式启动较慢但是稳定运行后执行速度较快,因为server 模式采用了优化方式是重量级JVM模式    JVM运行时是动态解释java 字节码(.class文件),当JVM发现热点代码时会将热点代码编译成本地操作系统相关的机器码并进行优化,这种行为叫做即时编译器也就是JIT(just in time compiler) JIT的优化有: 1. 公共子表达式消除 2. 方法内联:JIT会将被调用的方法直接用方法体中的代码代替,减少了方法调用过程中的压栈出栈。 3. jdk7后默认开启逃逸分析,逃逸是指当一个对象在方法中被定义,而它能被外部方法引用。 逃逸分析包括: 全局变量赋值逃逸,方法返回值逃逸,实例引用逃逸等    public class A{ //全局变量 public static Object object; public void globalVariableEscape(){//全局变量赋值逃逸 object = new Object(); } public Object methodEscape(){ //方法返回值逃逸 return new Object(); } public void

对python中元类的理解

橙三吉。 提交于 2020-01-07 22:39:45
1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = ObjectCreator() >>> print my_object <__main__.ObjectCreator object at 0x8974f2c> 但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。 下面的代码段: >>> class ObjectCreator(object): … pass … 将在内存中创建一个对象,名字就是ObjectCreator。这个对象(类对象ObjectCreator)拥有创建对象(实例对象)的能力。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作: 你可以将它赋值给一个变量 你可以拷贝它 你可以为它增加属性 你可以将它作为函数参数进行传递 下面是示例: >>> print ObjectCreator # 你可以打印一个类,因为它其实也是一个对象 <class '__main__.ObjectCreator'> >>> def echo(o): … print o … >>> echo

C#重载和继承混用会怎样?

耗尽温柔 提交于 2020-01-07 22:06:50
C#重载和继承混用会怎样? OverLoad就是重载,大家都会。但是大家有没有想过,我们调用一个重载方法的时候会调用哪个呢?? 答案是和签名最接近的一个。 大家是不是看到这里已经开始觉得这个博客很无聊了,都是这么简单的内容。没关系,我们慢慢深入。 我们知道方法为了能够减少书写个数, 提供了一个叫默认参数的东西 void P ( object p1 , bool p2 = true ) { } 这样我们可以通过 P(p1) 或者 P(p1true) 两种方式来进行调用 如果我们这个时候的重载情况时这样的 void P ( object p1 ) { Console . WriteLine ( "第一个" ) ; } void P ( object p1 , bool p2 = true ) { Console . WriteLine ( "第二个" ) ; } 此时再调用, P(p1) 执行的是上一个函数。一种理解方式是,第二个方法比第一个能够多处理一种情况 P(p1,true) 。所以我们专事专用,选择更具体的方法。 ok.C#作为一个OO语言,还有一个特点就是继承,这个同样反映在方法里 void P ( object p1 ) { } 对于上述方法,可以使用 object 作为参数,也可以使用更加具体的 object 子类 那么如果我们的重载情况时这样的 void P (

python 正则表达式

旧巷老猫 提交于 2020-01-07 20:35:23
基本语法 # 1. 一般字符: 匹配字符的本身 print(re.match("abc","abcdefg")) print("abc" in "abcdefg") # 2 【.】 --匹配一个除\n 外所有的字符 # 需求: 三个字母,第一个是a print(re.match("^a..$","a35")) # 3 【\】 --转义字符 print(re.match("a\...","a.1#")) print(re.match("a[.]..","a.123")) print(re.match("a[.]..$","a.1#asdfasdf")) # 4 【】 --字符集中的任意一个字符 print(re.match("^a[bdc]e$","abe")) print(re.match("^a[bdc]e$","ade")) print(re.match("^a[bdc]e$","ace")) # 5 开头: ^ 结尾: $ --- 完全匹配 print(re.match("^a[bdc]f$","acf")) <re.Match object; span=(0, 3), match='abc'> True <re.Match object; span=(0, 3), match='a35'> <re.Match object; span=(0, 4), match='a.1#

Object.create()

爱⌒轻易说出口 提交于 2020-01-07 19:30:05
语法: Object.create(proto, [propertiesObject]) //方法创建一个新对象,使用现有的对象来提供新创建的对象的 proto 。 参数: proto : 必须。表示新建对象的原型对象,即该参数会被赋值到目标对象(即新对象,或说是最后返回的对象)的原型上。该参数可以是 null , 对象 , 函数的 prototype属性 (创建空的对象时需传null , 否则会抛出 TypeError 异常)。 propertiesObject : 可选。 添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应 Object.defineProperties() 的第二个参数。 3 返回值: 在指定原型对象上添加新属性后的对象。 案例说明: 1)创建对象的方式不同 new Object() 通过构造函数来创建对象, 添加的属性是在自身实例下。 Object.create() es6创建对象的另一种方式,可以理解为继承一个对象, 添加的属性是在原型下。 // new Object() 方式创建 var a = { rep : 'apple' } var b = new Object(a) console.log(b) // {rep: "apple"} console.log(b.__proto__