[关闭]
@MRsunhuimin 2022-02-12T01:03:26.000000Z 字数 2350 阅读 153

记忆盲区

总结

作者:孙慧敏

1. & 和 &&(短路与)以及 | 和 ||

    & 不管前面的条件是否正确,后面都执行

    && 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。

    ||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断
运算符 含义 运算规则
&& 短路与 两个操作数都是true,结果才是true
短路或 短路或 两个操作数一个是true,结果就是true
! 操作数为true,结果为false;操作数为false,结果为true

2. i++和++i 以及 i--和--i

    i++和++i

    i++先执行程序,再自己加1;++i先自己加1,再执行程序。

    i--和--i

    i--是先执行程序,再自己减一;--i先自己减一,再执行程序。  

3. equals和==

    1. 基本数据类型,也称原始数据类型,应用双等号(==),比较的是他们的值。;equals方法不能作用于基本数据类型的变量。
    2. 引用数据类型
    ==进行比较的时候,一般比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    例如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。 

4. 冒泡排序

冒泡排序:N个数;

1.两层循环,外层循环N-1遍,控制循环的趟数,(n-1)是因为最后一趟不用比;

2.内层,相邻两数比较,大的往后走;每走完一趟,比较次数少一次;

3.循环结束,数组有序(升序);

代码:

  1. public static void main(String[] args) {
  2. for (int i = 0;i<test.length;i++){
  3. for(int j = 0;j<test.length-i-1;j++){
  4. if(test[j] > test[j+1]){
  5. int temp = test[j];
  6. test[j] = test[j+1];
  7. test[j+1] = temp;
  8. }
  9. }
  10. }
  11. System.out.println(Arrays.toarray(数组名));
  12. }

升序排序:

    1. 每次比较相邻两数
    2. 小的交换到前面
    3. 每轮结束后最大的数交换到最后

特点:

    1. 时间复杂度: O(N^2)
    2. 空间复杂度: O(1)
    3. 稳定性:稳定

5. %和/

    %求余数

    /求整数

6.JAVA中”单引号”,“双引号”,区别:

  • 单引号引的数据 是char类型的——》单引号只能引一个字符(表示单个字符)
  • 双引号引的数据 是String类型的——》而双引号可以引0个及其以上(引用字符串)

7.为什么要用where 1=1?

    之前一直不太明白,sql语句里为什么要写where 1=1 巴拉巴拉巴拉

    提升某种执行效率?

    其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以。

    这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的。

    如:web界面查询用户的信息,where默认为1=1,这样用户即使不选择任何条件,sql查询也不会出错。如果用户选择了姓名,那么where变成了where 1=1 and 姓名='用户输入的姓名',如果还选择了其他的条件,就不断在where 条件后追加 and语句就行了。

    如果不用1=1的话,每加一个条件,都要判断前面有没有where 条件,如果没有就写where ...,有就写and语句,因此此时用1=1可以简化了应用程序的复杂度。

MyBatis 中为什么不建议使用 where 1=1?
几乎所有的 mapper 中都包含了一个无用的拼接 SQL:where 1=1,如果框架使用的是MyBatis,那么
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.example.demo.mapper.UserMapper">
  4. <select id="list" resultType="com.example.demo.model.User">
  5. select * from user
  6. where 1=1
  7. <if test="name!=null">
  8. and name=#{name}
  9. </if>
  10. <if test="password!=null">
  11. and password=#{password}
  12. </if>
  13. </select>
  14. </mapper>

MyBatis 中早已经想到了这个问题,可以将 SQL 中的 where 关键字换成 MyBatis 中的标签,并且给每个标签内都加上 and 拼接符,这样问题就解决了

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.example.demo.mapper.UserMapper">
  4. <select id="list" resultType="com.example.demo.model.User">
  5. select * from user
  6. <where>
  7. <if test="name!=null">
  8. and name=#{name}
  9. </if>
  10. <if test="password!=null">
  11. and password=#{password}
  12. </if>
  13. </where>
  14. </select>
  15. </mapper>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注