NO1:==和equals的区别
==
可以用来比较基本类型和引用类型,判断内容和内存地址equals
只能用来比较引用类型,它只判断内容。该函数存在于老祖宗类 java.lang.Object
java中的数据类型,可分为两类:
基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==
),比较的是他们的值。复合数据类型(类)
当他们用(==
)进行比较的时候,比较的是他们在内存中的存放地址,
所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法。
这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了。
如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,
他们之间的比较还是基于他们在内存中的存放位置的地址值的, 因为Object的equals方法也是用双等号(==
)进行比较的,所以比较后的结果跟双等号(==
)的结果相同。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
public class Test {
public static void main(String[] args) {
//测试1
Integer tt=new Integer(555);
Integer t=new Integer(555);
System.out.println(tt.equals(t)); //打印出true
System.out.println(tt==t); //打印出false
//测试2 重写equals
Student t1=new Student(999,"sovzn");
Student t2=new Student(999,"sovzn");
System.out.println(t1.equals(t2)); //打印true
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Student{
private Integer id;//Integer和String已经重写equals
private String name;
//重写equals方法,使其比较的是对象的值,而不是内存地址
@Override
public boolean equals(Object obj){
//如果传进来的是对象本身(自己和自己比),直接返回true
if(this==obj)
{ return true;}
//如果传进来的是个空对象,则直接返回false
if(obj==null)
{ return false;}
if(obj instanceof Student){ //首先判断参数对象和调用对象类型是否相同,不同直接返回false
if(this.getId().equals(((Student)obj).getId())&& this.getName().equals(((Student)obj).getName())) { return true; }
else{ return false; }
}
return false;
}
}
JavaScript 同步与异步 promise await/async
同步:
同步就是后一个任务等待前一个任务执行完毕后,再执行,执行顺序和任务的排列顺序一致
异步:
异步是非阻塞的,异步逻辑与主逻辑相互独立,主逻辑不需要等待异步逻辑完成,而是可以立刻继续下去
举个栗子:
同步:同学按照排队的顺序,依次打饭,只有前面一个人打完饭后,才轮到后面一个人
异步:有同学忘记带饭卡了,怎么办?如果一直等着饭卡拿来,那是不是很花时间,后面同学就不能打饭了!
所以呢,我让出来,**让后面的人先打饭**,等我的饭卡到了,我再打饭
———————————————–1.promise———————————————————-
异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大
有三个状态:
1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[拒绝]操作失败
var promise=new Promise(传一个函数);
var promise=new Promise(function(resolve,reject){//初始状态
if(/*异步操作成功*/){
resolve(value);//操作成功
}else{
reject(error);//操作失败
}});
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤
状态改变,只有两种可能:
从pending(初始状态)变为fulfilled(操作成功)
从pending(初始状态)变为rejected(操作失败)
var promise=new Promise(function(resolve,reject){
if(false){
resolve('success');
}else{
reject('fail');
}
});
promise.then(res=>{ //then 接收fulfilled状态的数据
console.log(res)//成功 resolve('success')
}).catch(err=>{ //catch 接收rejected状态的数据
console.log(err)//失败reject('fail);
});
———————————————–2.async/await———————————————————-
MySQL模糊查询
% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
- 1、LIKE’Mc%’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
- 2、LIKE’%inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
- 3、LIKE’%en%’ 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
- 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’ - 若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句
- 1、LIKE’_heryl’ 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
- 比如 SELECT * FROM [user] WHERE u_name LIKE ‘三‘
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的。
[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
- 1、 比如 SELECT * FROM [user] WHERE u_name LIKE ‘[张李王]三’
将找出“张三”、“李三”、“王三”(而不是“张李王三”); - 2、 LIKE’[CK]ars[eo]n’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
- LIKE’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。 (01234、abcde之类的)则可略写为 “0-4”、“a-e”
- 1、 比如 SELECT * FROM [user] WHERE u_name LIKE ‘[张李王]三’
[^ ] :表示不在括号所列之内的单个字符。其取值和 [ ] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
LIKE'M[^c]%'
将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
查询内容包含通配符时
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str) str=replace(str,"[","[[]") '此句一定要在最前 str=replace(str,"_","[_]") str=replace(str,"%","[%]") sqlencode=str end function
在查询前将待查字符串先经该函数处理即可 ,另外注意 like 后的内容都必须要用单引号。
- Post link: http://sovzn.github.io/2021/07/01/%E5%9F%BA%E7%A1%80-01/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues