拥有引用,并不一定需要一个对象与之关联:
创建引用String s; 当你并未给s赋值的时候(即未初始化),此时发送信息给s,会返回运行时错误。
我们可以通过函数调用来理解:
public List> combinationSum(int[] nums, int target) {
List> list = new ArrayList<>();
Arrays.sort(nums);
backtrack(list, new ArrayList<>(), nums, target, 0);
return list;
}
private void backtrack(List> list, List tmpList, int[] nums, int remain, int start) {
...
值得一提的是:String s = "abcd"; Java语言的特性:字符串可以用带引号的文本初始化。
我们关心对象放在哪儿?内存如何分配?对于我们理解算法,理解程序大有裨益。
1.寄存器:最快存储区,CPU内部,数量少,不能直接控制。
2.栈:位于通用RAM中,最大特点就是必须明确程序在栈上的项目的生命周期,以分配和释放内存,所以限制了灵活性,java对象不存储于其中。
3.堆:存放所有Java对象,执行new语句后动态创建对象,好处是灵活,坏处是于栈相比,进行存储分配和清理会耗费较多时间。
4.常量存储:通常直接存放在程序代码内部。
特例:基本类型
明确,不用new在堆上创建基本类型,而是采用和c,c++相同的方法,基本类型的变量直接存储值,放在栈上,目的是提高效率。
基本类型如下:
boolean, char, byte, short, int, long, float, double, void
Java的基本类型特点如下:
1)Java确定每种基本类型所占存储空间的大小,例如:int 32bits, long 64bits... 它们不像其他大多数语言那样随着机器硬件架构的
变化而变化,所以Java程序更具有可移植性。
2)所有数值类型都有正负号,不用去寻找无符号的数值类型
3)提供包装器类,可以在堆中创建一个非基本对象,来表示对应基本类型。比如:char c = 'x',包装器类写法:Character c = new Character('x'). 在Java SE5中提供了自动包装功能: Character c = 'x'.
Java数组特点:
1)确保数组初始化【在c中,不少人吃过亏 ,滑稽】
2)确保不能范围之外被访问