自增自减运算符
自增运算符(++)和自减运算符(--)。
当运算符放在操作数之前时,先自增/减,再赋值;当运算符放在操作数之后时,先赋值,再自增/减。
例如,当“b=++a”时,先自增(自己增加 1),再赋值(赋值给 b);当“b=a++”时,先赋值(赋值给 b),再自增(自己增加 1)。
也就是,++a 输 出的是 a+1 的值,a++输出的是 a 值。用一句口诀就是:“符号在前就先加/减,符号在后就后加/减”。
a = 1 b = ++a ——> a=2 b=2
a = 1 b = a++ ——> a=2 b=1
a = 1 b = a-- ——> a=0 b=1
a = 1 b = --a ——> a=0 b=0
continue、break、和return的区别是什么?
1. continue :指跳出当前的这一次循环,继续下一次循环。
2. break :指跳出整个循环体,继续执行循环下面的语句。
3. return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:
return;:直接使用 return 结束方法执行,用于没有返回值函数的方法
return value: return一个特定值,用于有返回值函数的方法
“==”和equals的区别
“==”和equals 最大的区别是
- “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。
- equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。
“==”是运算符
1. 如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;
2. 如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。
equals是Object的方法,用来比较两个对象的内容是否相等。
1. equals 方法不能用于比较基本数据类型,如果没有对 equals 方法进行重写,则相当于“==”,比较的是引用类型的变量所指向的对象的地址值。
2. 一般情况下,类会重写equals方法用来比较两个对象的内容是否相等。比如String类中的equals()是被重写了,比较的是对象的值。
HashCode和equal方法
https://blog.csdn.net/WinnerBear/article/details/126068645 这篇比较详细明了
在java中有一个共同的父类 Object ,所有对象均隐性继承了此类,其中 equals() 与 hashCode() 就是继承过来的方法。
equals()反映的是对象或变量具体的值,即两个对象里面包含的值,可能是对象的引用,也可能是值类型的值。
而hashCode()是对象或变量通过哈希算法计算出的哈希值。
之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。
1、为什么要重写equals、hashCode方法?
答案:
(1)如果类中不重写方法:
hashCode():属于本地方法,返回的是对象的哈希码值,也称为散列码,实际返回的是一个int的整数。
(根据一定的规则与对象相关信息(例如对象的存储地址,对象的字段等)映射成一个数组,这个数值就被称为散列值。)
equals():用来比较两个对象的地址值是否相等
(2)如果类中重写方法:
hashCode():返回的是根据对象的成员变量,计算出的一个整数。
equals():比较的是两个对象中成员信息是否相同
3、为什么equals()相等,hashCode就一定要相等,而hashCode相等,却不要求equals相等?
答案:1、因为是按照hashCode来访问小内存块,所以hashCode必须相等。
2、HashMap获取一个对象是比较key的hashCode相等和equal为true。
之所以hashCode相等,却可以equal不等,就比如ObjectA和ObjectB他们都有属性name,那么hashCode都以name计算,所以hashCode一样,但是两个对象属于不同类型,所以equal为false。
4、为什么需要hashCode?
通过hashCode可以很快的查到小内存块。
通过hashCode比较比equal方法快,当get时先比较hashCode,如果hashCode不同,直接返回false。
标签:运算符,java,对象,equals,hashCode,语法,方法,比较 From: https://www.cnblogs.com/lzh7513/p/17037175.html