00:00
好了各位,那我考一考一下大家啊。我们这个程序有bug吗?有没有漏洞?有没有漏洞,比如说my time。T4等于空。T一点ST4会不会出问题?把T4这个空传进去了。这个obj是空。这个有没有问题?程序可能是没问题。对吧,还是说有问题,各位这个。T4它本身就是空值。会控制异常。会吗?来我们看一下啊。Java c。
01:01
啊。零二这Java。加va一行太零走一个啊。好,大看没问题。啊,这层有bug吗?没有。啊,没有,但是我问你。你代码这样写效率行不行,就是我们谈一下效率问题,就大家看啊,我这里传一个空进去啊,None是不是传进去了,None是不是付给了object呀,好,首先这个位置是不是none啊。Of是吗?是一个mytime吗?不是,所以是不是return for。他没有执行到这个里边啊,执行到这个里边就会出现空值异常。明白吗?哎,这个。没问题,但是效率有问题,就是这里啊,有bug吗?可以。但是效率怎么样?嗯。
02:00
怎么改造?怎么改造,各位你把这个equals方法。再改造一下。你上来第一件事儿,去this里面获取年月日,是不是有点太早了?大家想过这个问题吗?改良一下equals各位啊。拿过来。注意看啊,首先第一个如果OBJ。等于。
03:06
Return。因为前面这个不可能等于none各位。那去调方法是不是一定会出现空指针异常?如果这个方法能执行,这说明前面这个是不是一定不是空。这个逻辑推理还行吗?如果是,那是直接给它返回false就完事了。对吧,再接着往下判断。如果你。OBJ。Instance of。By time。加个叹号。能看懂吗?叹号表示什么意思啊?
04:01
对吧,哎。如果obj压根不是个my time。什么?放吧。是不是你多考虑几种情况啊,如果OBD是空。直接访问。如果OBJ是空,直接返回false,就这意思。那如果OBJ不是一个mytime。没必要比较了。直接返回false,你好好想,是不是这个你是个空,那就没必要比较了,如果你OBJ传过来这个东西压根就不是一个mytime,不是啊,这个不是mytime。对吧,就返回就行了。只有牛逼的是一个my time,我们才有必要往下进行吗?
05:04
对不对,好,那再判断一下,如果。This跟OBJ的内存地址一样,还有必要判断吗?直接return什么呀?True是不是就行了?好,这句话表示什么意思?就是如果Z和OBJ的。OBJ保存的内存地址相同,没必要比较了,直接返回处。如果你这个Z在这个方法的这个Z和这个OBJ啊,它怎么着啊,是相等的,用双等号它成立了,这说明这个Z变量里面保存内存地址和这个OBG里边变量里面保存内存地址是不是一样的呀。对吧,它的内存地址相同,那你还比较吗?内存地址相同,那就意味着说他是这个意思,各位啊,他是什么意思,他是这个意思。就是t1.1cos谁啊T1,那你想想这还有比较比较吗。
06:04
T1是谁?是不是this啊?调用equals传过去TT又付给了谁?是OB呀。是不是啊,如果你这个相等的话,直接返回处就行了,就是内存地址相同的情况下,我们肯定是同一个对象,是不是内存地址相同的情况下,肯定是指向同一个对象啊,对吧?就是说内存地址相同的时候,指向的对象,指向的堆内存的对象肯定是同一个喽,那没跑啊,所以他处就行了,好程序能到这就说明啥?程序能够执行到此处说明什么?说明OBJ不是那。OJ是my time。类型,那我问大家是不是这个时候才有必要。
07:02
才有必要去写你的代码呀。对吧,哎,写代码啊,才有必要写代码,OB这怎么着。是不是转型啊,转成谁呀,My time吧。Mytime吧?是不是T好了转型了啊,为什么这块敢这么大胆的去转?各位告诉我,为什么这块就不需要再加判断了,为什么这块不需要加判断了,为什么直接可以向下转型告诉我。这为什么可以直接写线下转型?因为城区能到这儿,这说明什么?OBJ肯定是一个啥mytime,如果你OBJ不是一个mytime,是不是就结束了,程序能到这就说明OBJ它是不是一定是一个mytime,所以是不是可以强转啊,转完之后我们可以直接判断一下,如果this点年等于等于T点年,并且说this.month等于等于点month。
08:06
并且说点day等于等于t.day注意看好了啊,是你this.year是当前对象的年和T,就是转向下转型转文的T t.year并且它并且它相等的时候,二话不说,直接return一个true就行了,程序能到这啊,程序能到这里返回false return false。你想想大家看这个程序改造就成变变变成这样了,就变成这样了。这个程序的效率要比我们上面这个E方的效率要高一些啊,效率要高一些,来我们再去编译我们的程序啊,然后再去运行我们的程序,和刚才是不是一样的。最后是呃,True false true false false。
09:01
来。呃,第一个是true,第二个是双等号的false,这个是true是吧?T1EQUALS t2啊,然后这个是T1T3是吧?False这个是不是也是false啊,对吧?哎,没有任何问题啊,没有任何问题,但是我来这个代码是不是还可以再改啊。能不能改一下,各位再改一下。永同老师,你这块怎么还能再改啊?来再次改良啊。我改良这样改行不行。直接把这都去掉,把它都删了。这样行不行?嗯。行不行?
10:02
双等号是短路语吧?短路与执行结束的结果。是不是一个处或者是方法。对吧,哎,所以这个结果相等那就是处呗,不相等就是false呗。是不是,哎,相等就是不相等就是false啊就这样的,嗯,来我们编译一下再去运行。啊,结果是一样的,各位啊。嗯,可以。可以,如果这个OBG等于等于空,或者说我们的这个条件成立。对吧,哎,返回false。对不对,可以,这个可以合并啊,没问题,没问题啊,可以合并。那如果要把前面这个if语句也合并一下的话,我们把这个。再拿一下啊,你看会是变成这样。
11:01
嗯。如果OBJ等于等于空,或者说。这个条件成立。Fo。对吧,哎。那如果this等于等于obj,那return true就行了。这个代码就变成这样了。好,大家看equals方法进行重写,这样重写是吧,OBJ等于等于空,或者说OBJ它不是一个mytime的话,我都返回false。啊都返回false,然后呢,哎,我在这块怎么着啊,哎,判断一下if,如果this次要等于等于OBBJ的话,那就直接return出就行了啊然后呢,程序到这的话,你转型,转完型之后呢,哎,直接调用this.year等等t.year并且说this month等于t.month并且说this.day等于等于t.day啊t.day。
12:00
行,休息一下啊,休息一下。
我来说两句