每周一篇-无聊写写001
1Object类的常见方法:
1.hashCode();
2.equals();
Java中equals和==的区别
java中的数据类型,可分为两类:
(1)基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
(2)复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据删除线格式 类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
3.clone();
//注意事项:此方法可以实现对一个类的克隆操作,但是clone()方法会抛出CloneNotSupportedException。要调用clone()方法,我们需要将调用放在try-catch块中,或者重新抛出异常。
4.toString();
//线程大家族方法,通常在多线程方法中使用。
5.wait();//通常传入一个等待时间的参数,如果需要提前解束,可以调用notify()方法。
6.notify()、notifyall()等
7.finalize()//通常在JVM的GC机制(垃圾回收)中使用此方法。
==========================================
2 Mysql常见小问题:
count(*)和count(1)的区别,更推荐用count(column列名):
1.count()为聚合函数,是对select的结果集进行技术,但是需要参数不为NULL。
但是count( * )不关心返回值是否为null都会计算他的count,然而count(1)中的1为恒真表达式,所以count( * )和count(1)本质上没有区别。
2.count(column列名)则会判断结果集每一条数据的column列名是否为null再进行count。所以性能远远低于前两者。
3.效率比较:
count(*)=count(1)>count(primary key)>count(column列名)
大于小于和like等常见用法:
1.大于小于会导致索引失效,例如:explain select * from tableA where age >= 15 and age <= 18 的type就是ALL。
2.like查询是以%开头,索引失效;以%结尾,索引有效
(理论上说:统计阅读月份天表的时候数据量小:用 “readDay” like “201801%” 效率高于 “readDay” >= “20180101” and “readDay” <= “20180131 )
===========================================
3语法糖:
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。
我们所熟知的编程语言中几乎都有语法糖。作者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。
4解语法糖:
前面提到过,语法糖的存在主要是方便开发人员使用。但其实,Java虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖
如果你去看com.sun.tools.javac.main.JavaCompiler的源码,你会发现在compile()中有一个步骤就是调用desugar(),这个方法就是负责解语法糖的实现的。
=============================
新人博客不喜勿喷,希望可以得到大佬的指引。