01、方法参数传递机制
1.方法参数传递机制:int[ ] arr 和 int a 作为方法的参数,有什么不一样呢?
02、Upcasting向上转型
2.Upcasting向上转型:Pet p = new Cat(), 当发生了向上转型之后,p能够调用哪些方法呢,执行效果应该如何查看呢?
03、随机函数
3.随机函数:如何利用随机数函数取到一个区间[low,high-1] 上的所有整数(包含端点)?
04、Binary search 算法
4.Binary search 算法:利用binary search 在数组中查找任意数字k,那么最少需要查找多少次肯定能找到。
05、字符串的比较
5.字符串的比较:compareTo(), == 和equals分别比较的是什么?
看一看
关于AP计算机上面的问题,你都做对了么?
这几个问题在AP计算机中出现的比较高频,并且容易出错,在这里我们给大家详细解答一下。
📚1.第一题涉及了方法参数的传递机制。
在Java中,所有的数据分为基本数据类型和引用数据类型,这两种数据类型在作为方法的参数有所不同。
-
对于基本数据类型,参数传递机制时值传递(value passing),这意味着参数和主函数中的变量是相互独立的,所以即便在方法中,参数的值被修改了,也不会影响主函数中的 变量的值;
-
对于引用数据类型来说,参数的传递机制是地址传递(address passing),这意味着参数和主函数中的对应的变量指向同一个地址,本质上是同一个内存空间。当参数在函数中被改变,那么相应的主函数中的变量也会改变。
int []arr是引用数据类型,int a中的a是基本数据类型。但是也存在arr作为参数传到函数中,也有可能会被赋予新的地址,那么此时参数arr和主函数中的数组就是相互独立的。
📚2.当发生向上转型的时候,需要区别编译类和运行类,赋值号左边的Pet类(父类)是编译类,赋值号右边的是Cat类(子类)。
在向上转型前提下,是否能够通过编译看编译类是否具有该方法,具体的执行效果需要先看执行类是否包含该方法,
-
如果包含,那么执行子类中该方法的效果。
-
如果没有,那么就去父类中找该方法,执行父类中该方法的效果。
📚3.随机函数Math.ramdon()是用来返回一个在0和1之间的小数,含0不含1。
对于任意一个区间[low, high-1]之间的整数,我们只需要利用公式(int)(high - low) * Math.random() + low 就可求出,不要忘记强制转换成(int)类型的数。
📚4.Binary Search通常在选择题中被考察。
对于在长度为n的数组中查找任意一个数字k,对于最少查找次数m满足 2m-1 < n <= 2m 即可。
📚5.字符串的比较在AP CSA中是肯定会出现的内容,只要区别这三种比较字符串的方式即可。
a)str1.compareTo(str)用于比较字符串大小,返回的是两个字符串的差值;
b)str1 == str2 比较的是两个字符串的地址,比较结果取决于字符串的初始化方式
c)str1.equals(str2)比较的是两个字符串的内容,如果两个字符串的值一样,那么结果为true,否则为false。