继昨天自学中应该注意的事项之后,今天再来聊一下java中容易出现的基本问题吧。
首先基本类型和它的包装类我就不多说了,但是值得注意的是String,首先它并不是基本类型,其次它被定义为final类型(也就是说不可集成),为什么要把String定义为final?网上也有很多答案,比较好的答案是:主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。
再来说一下用String连接字符串的问题吧,一般大家习惯这样来创建一个字符串对象
String string="abcdef";
连接的时候直接用“+”号链接,一般情况下这没什么问题,但是在for循环要很多次连接字符串的情况下它的效率就很低了,用StringBuilder或StringBuffer会比较好,我在StringBuilder和StringBuffer解析(百度面试题优化需要用到的)有说明。你也可以在我的博客www.marksaas.com看到。。
下面在在来说一下在线性表中容易犯的错误。。
看下面的程序:
import java.util.LinkedList;
import java.util.List;
/**
* author:marksaas
* blog:www.marksaas.com
*在用for循环时,使用线性表删除所以元素时容易发生跳跃,可以每次删除一个元素后让变量-1
*最好用clear()功能删除所以元素
*
*/
public class For {
public static void main(String[] args) {
List<String> tempList=new LinkedList<String>();
tempList.add("a");
tempList.add("b");
tempList.add("c");
for(int i=0;i<tempList.size();i++){
tempList.remove(i);
//i-=1;
}
if(tempList.size()>0){
System.out.println("\n剩余元素个数为"+tempList.size()+",具体元素有:");
for(String item:tempList){
System.out.println(item+" ");
}
}
else{
System.out.println("clear all");
}
}
}
当把注释去掉后元素才会真正删除完。。
另外在写程序的时候请注意0的使用,看如下代码:
/**
* author:marksaas
* blog:www.marksaas.com
*
*/
public class DangerOfZero {
public static void main(String[] args) {
int num1=023;//num1为八进制数
int num2=3;
int result=num1*num2;
System.out.println(result);
}
}
输出结果显然和预期的结果就不符了,关于优先级我想说的是为了尽量让程序清晰易读,请适当加上括号。关于优先级的图我就不上了,网上多的是。。
今天先说到这,如果大家有补充的欢迎在下面留言,欢迎关注我的微博 ,我的微博会实时更新文章。 交流群: