相似与区别

---栈(stack)与堆(heap):Java把内存划分成两种,一种是栈内存,一种是堆内存。

栈:存放基本数据类型和引用变量;
当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用;
优势是:存取速度快,数据可以共享;
缺点是:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性;

堆:存放由 new 创建的对象和数组;
数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉);
优势是:可以动态地分配内存大小,生存期也不必事先告诉编译器,java垃圾收集器会自动收走不再使用的数据;
缺点是:由于要在运行时动态分配内存,存取速度较慢;


---java垃圾回收机制(GC):释放掉在内存中已经没用的对象
垃圾回收是在虚拟机空闲的时候或者内存紧张的时候执行的,什么时候回收不是由程序员来控制的,这也就是java比较耗内存的原因之一。


---equals和==的区别
1.基本数据类型,用==比较,比较的是两者的值是否相等;equals方法不能作用于基本数据类型的变量。
2.复合数据类型,用==比较,比较的是引用的地址是否相同;Object中的.equals()方法和"==’功能一样;
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

如:
1.
String s1 = "hello";
String s2 = new String("hello");
//s1 != s2 s1 equals s2
2.
String s1 = "hello";
String s2 = "hello";
//s1 == s2 s1 equals s2
3.
String s1 = new String("hello");
String s2 = new String("hello");
s1 != s2 s1 equals s2
4.
String s1 = "hello";
String s2 = new String("hello");
s2 = s2.intern();
//s1 == s2 s1 equals s2
5.
String s = new String("hello");
String s1 = new String("hello");
String s2 = new String("hello");
s1 = s;
s2 = s;
//s1 == s2 s1 equals s2
6.
String s1 = new String("hello");
String s2 = s1;
//s1 == s2 s1 equals s2


---与(&)和短路与(&&)的区别:前后几个表达式的内容都是true,最终结果才是true,如果有一个是false,则最终结果就是false;
电路问题总结:
对于:& -- > 不管怎样,都会执行"&"符号左右两边的程序
对于:&& -- > 只有当符号"&&"左边程序为真(true)后,才会执行符号"&&"右边的程序。

运算规则:
对于:& -- > 只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true
对于:&& -- > 只要符号左边为false,则结果为false;当左边为true,同时右边也为true,则结果为true

如:
1.
int i=3;
if((i++>5)&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
//结果是i=5

2.
int i=3;
if((i++>5)&&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
//结果是i=4


---或(|)和短路或(||)的区别:前后几个表达式只要有一个true,则最终结果就是true,如果全都是false,则最终结果才是false;
同理与(&)和短路与(&&)的区别

posted @ 2018-01-17 15:29  gfbceo  阅读(123)  评论(0编辑  收藏  举报