JAVA中的小知识点

1.尾递归
定义:尾递归就是把当前的运算结果(或路径)放在参数里传给下层函数
尾递归与一般递归案例:
尾递归形式:
int fun(int sum,int n){
if(n==0) return sum;
return fun(sum+n,n-1);
}
递归一般形式:
int fun(int n){
if(n==0) return 0;
return n+fun(n-1);
}
特性:尾递归由于直接返回值,不需要保存临时变量,所以性能不会产生线性增加。并且编译器会将尾递归形式优化成非递归形式。

2.String,StringBuilder,StringBuffer
Strin对象是固定大小的,而StringBuffer与StringBuilder则是可变的,因此对于经常要改变大小的字符串最好用StringBuffer与StringBuilder,String在进行字符串拼接时需要生成另一个对象然后将以前的指针指向现在重新创建的对象,在此期间如果在循环中将消耗很多时间。但对于一种特殊的字符串拼接如:String str=“this is"+"an example",
jvm会将其识别为一个String str=“this is an example”。
不过,这里还要介绍一种StringBuilder。通过网上大量的了解,这个类在有些时候比StringBuffer运行更快。
首先是要区别他们两个:
StringBuffer是线程安全的
StringBuilder是线程不安全的
StringBuffer系统开销要大,原因不详,因此对于单线程速度方面StringBuilder更好。
那为什么我们很少见到StringBuilder呢?原因很简单,因为我们有时候很难确定我们创建的系统会不会是多线程的,如果考虑到以后扩展的可能性,则更难确定,所以我们更愿意使用StringBuffer,因为它是线程安全的,不用担心以后扩展。

3.面向对象与基于对象
面向对象的特征基本就是:封装,继承,多态
基于对象就只是没有继承。
基于对象就是只能对对象进行操作,不能利用它生成新的对象类型。
一个和语言有关,另一个和编程有关,如果语言允许你使用继承,但是你偏不用,那也只能算基于对象编程了。

你可能感兴趣的:(java,jvm,多线程,编程)