00:00
那么接下来咱们干什么呢?咱们来看一看昨天这个作业。行吧,哎,看一下这个作业啊,那这个代码呢,我还是给大家写到这个CHAPTER05里边,第五章里边啊,还是写到这,因为这个毕竟是第五章的一个作业嘛,是不是啊行,那么这块呢,咱们来看一下各位啊看一下啊这个首先啊,我先说一下大家那个这个群里边讨论的那个问题啊,我先说一下那个问题,说完之后呢,嗯,我再去说一下我们这个第五章的一个作业啊,这个第五章的这个这个地方有个习题。是吧,哎,这个习题啊,到时候咱们一个题一个题看一看啊,当然我可能会挑重点的看一下啊,重点的看一下。来先看大家讨论的这个问题啊,我们点右键新建一个。嗯,就叫做homework吧,啊HOMEWORK01啊加。
01:00
啊,那么这一块呢,咱们。Public class,我们叫做HOMEWORK01。Public static void men。就大家讨论最多的一个问题啊,我我看了一下啊,大家讨论最多的一个问题。啊,一个问题,那么这个问题是什么呢?Int类型I等于10I干什么呢?等于I加加,现在呢,把这个I干啥呀,输出。那么这个结果啊,大部分同学啊,他都会认为等于11。对吧,大部分同学都会认为这里等于11啊,大部分同学都会认为这个I,这个I一定是11。
02:00
是吧,那么我们来编译一下,运行一下啊,我来编一下CMD回车Java c呢,我们去编译一下这个homework。啊,01点加吧。然后编译之后呢,我们Java去运行HOMEWORK01。那么这个结果让大家呢,都失望了啊,也让很多人都很惊讶啊。那么这个这个这个I变量I变量啊。最终的结果是十啊。就神奇啊,惊讶对不对,惊讶那么首先呢,我先说一下,我先说一下啊。说一下什么呢?这个问题没必要去讨论。啊,首先第一点啊,这个这种代码以后不会写,不会有人写。啊,不会有人写,这是第一点,第二其次第二点。
03:00
没必要讨论这个问题。啊,因为在C加加中。运行结果确实是11啊,确实是11。啊说首先第一点的这种代码,以后不会有人去写,你八定一个I变量,你I加加之后八再付个A你干啥呀。你干啥,你有啥用,有什么你你要做什么,你要干什么事儿,所以说这个东西啊,没有研究的一个价值啊,没有研究一个价值。那么这个结果现在在加法中啊,它是十啊,当然在C加里边它是11啊。加了中运行结果是十啊C加加运行结果是11啊,为什么?因为我只能这么说啊,为什么?因为啊,Java和C加加的编译器不一样啊,编译器是不同的人开发的。
04:05
啊,不同的人开发的原理不同。啊,原理不同,你怎么解释也解释不明白这个东西啊,但是我在这里给大家说一下,它到底怎么做了啊,它是这样的。就接下来我要说的是Java中它是怎么做的,明白吧,我只能给大家说一下Java中它是怎么做的,但是呢,这个东西到C加里边运行结果跟Java不一样啊,它不一样,对,那么你以哪个为准啊,那我可能会更偏向C加加啊,我认为C加加设计的这一点不错啊,我认为Java这一点设计的很烂。对,你看你这个这个这个这个怎么去认为啊,所以这个没有研究价值,那么这个时候呢,我给大家说一下是这样的啊。在Java语言中。语言中啊,这个A加加呀,I加加这种表达式啊这种。表达式在在干什么呢?在执行的时候。
05:01
会提前先将什么呢?先将I变量。找一个什么呀,临时变量存储一下啊,临时变量存储一下。Java中是这样的,C加加里边并没有这样做啊,C加加中并没有这样做。啊,你比如说我们现在有个in k啊等于十是不是,哎,K干什么呀?K等于什么呀?啊K加加,然后接下来干什么呀?在这system.out点打印输入,跟上边乘一模一样啊这个K的结果是十是不是?哎,Java c编译编译之后呢,我们Java去运行,你看结果是十是吧?它是怎么做的呢?他是怎么做的呢?它的过程是这样的啊。过程是这样的,我把这两行代码它的原理写一下啊,到此为止啊,咱就不用再去研究他们底层那个呃字解码二解码怎么是什么东西啊。他这样做的in类型K呀,等于什么呀,等于十,他找了一个临时变量in特类型什么呀?哎,临时变量temp把K呢付给了我们的一个temp,然后接接下来干什么呢?他进行了一个什么呀,进行了一个K加加啊K加加之后呢,紧接着K呢,等于什么呀,Temp他做了这么一件事。
06:15
他做了这么一件事,各位啊,首先这行代码对应的就是我们这行代码,这一行代码对应的是下边1233行代码啊,就是这一行对应的是下边这三行啊,就是这个K等于K加加,K等于K加加啊。对应的是下面三行代码。他会先把一个K变量干什么呀,哎。这不等号和这个叫做加加同时出现了吗?加加出现的变量后吗?是不是,哎先进行什么呀,赋值运算啊,然后再进行什么呀?哎,自加一运算,那么它实际上是。它实际上是干啥呢?对K加加,K加加是要进行的,就因为你这个式子里边不是有一个K加加嘛,所以K加加是一定要进行的,明白吗?就是说他把K变量拿出来是多少啊,是十,十呢,付给了temp,付给temp之后呢,这个temp这个临时变量里面保存这个是十,然后接下来诶该怎么进行还怎么进行,你你你你式子里边不是有K加加吗?那行我我该怎么加还怎么加,所以原先你K是十对吧,现在K加来之后,是不是变成了11呀?哎,好不容易变成十一八回来之后呢,Tap又重新给K呢上去了,所以导致呢,这个这个temp现在是多少是十嘛,对不对,所以这个十呢,再重新给这个K变量。
07:34
啊,再重新付给K,所以导致这个K又回去了,其实K并不是说他,嗯,不是他他这个中间并不是说他没加啊,他加了他这个加加操作已经一定是执行了啊,他这个加加是一定执行了,各位啊,一定执行了,他在哪执行,在这执行呢,先把K临时的找一个变量存起来,然后呢,K加加,然后加加完之后呢,再把time的值呢给了K,哎,我说一下啊,在C加加里边没有这步。
08:00
没有这一步。没有这步啊,所以说这个呢,大家也不用太去纠结啊,不用太去有同学说老师万一我以后笔试题。我笔试题要是,呃,要是遇到这个问题怎么办呢?对吧,那我建议你啊。特殊的案例,特殊记忆啊,你你这个这个这个东西啊,就是在网上也是一大堆一大堆人都在都在讨论这个东西啊,但讨论完之后,讨论完之后呢,发现也这个结果啊,也也也是怎么着跟C加减是不一样的,所以这个时候呢,你倒不如说你如果是只是针对这个题目的话,你可以记住这个题目,对,让这个结果等于十,诶你记住,但是如果说你要是C加加面试的话,这个你还真是不行啊,它等于11的啊,等于11的好,这个事呢,我就给大家聊到这儿吧,啊,我们先去编译啊,再去运行哈,大家看那个结果还是十和十对不对,哎,是这样的一个运行原理啊,它实际上是在加码中,我只能说在加吧,各位啊,如果到了C加加,对不起啊,就不是这三号代码了。它的代码就变了,代码就变了,就不一样了啊,这是因为编译器的问题啊,还是那那句话,各位啊,这个问题咱们只咱们自此啊,咱们打住不在微信群里面讨论问题,没有没有价值啊,意义不大,因为以后我们开发不会写这种代码啊,如果只是针对面试题的话,大家可以背背会啊,如果。
09:19
只是针对于面试题的话,建议背背啊,建议死记硬背啊,死记硬背有这么一个东西啊,了解一下,其实大家在群里边讨论一下,其实也行啊,其实也可以,C加加是11啊,C加加是11,不是十啊,不是十。加11啊。不是十啊,咱们课下再说这个事儿啊,课下再说这个事儿,好,这是这个问题啊,行,这个咱们就说到这儿啊。
我来说两句