1.new对象与对象=null区别
User test1 = null;
User test2 = new User();
上面两种的区别,直接等于null,内存并不会分配空间,只是代码层面上的显示,或者提示这里要创建一个User类型的对象而已,并不存在;
直接使用new创建对象,则会在内存中开辟空间,分配内存;
2.基本类型和引用数据类型存储情况
基本类型
java中有byte、short、int、long、char、boolean、float、double八种,在创建对应得变量时例如:
int i = 3;
int a = 4;
int b = 3;
b = 4;
定义的值是直接放在栈内存中,
执行的步骤,
a.首先在栈中创建变量为i的引用,
b.接着在栈里面查找,是否存在为3的值
c.没有则开辟空间,存放3这个字面值
在上面的代码中,创建
int b = 3;
这一步,在第三步值,就不会开辟空间,会直接将引用指向之前已经创建的3的栈内存地址
b = 4;
在执行到这一步时,改变b的值,并不会改变i的值,栈中只会把原来b引用指向3的地址,重新查询是否存在4的字面值,有则更改指向的栈地址,没有则重新开辟并指向开辟的栈地址;
注意:引用类型变量String也是以上面得方式存储在栈内存中得
引用数据类型
User test = new User();
引用数据类型在创建时,
a,只会在栈内存中创建对象得引用,
b.然后到堆内存中,开辟空间,创建user对象,存储着其对应的数据;
c.而将栈内存中开辟的引用指向堆中开辟的地址
注意
在java中使用“==”比较的是两个值的地址值,在对引用对象进行比较时,不能使用object的双等号直接进行比较
堆与栈
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
instanceof关键字
作用:
instanceof是java中的二元运算符;比较它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
注意
这里指的是类的实例即包含是本身的实例,也包含所有与其有直接或间接继承关系的子类的实例;
分割符
File.separator
在windows系统中,分割符为"“;在Linux系统中分割符为”/" ;File.separator则保证在任何系统中,都能自动的转化成对应的分割符
时间类型数据比较
compareTo
用法:
调用该方法进行比较的两个对象必须是Java中的Date类型对象
相等返回0,大于返回1,小于返回-1