继昨天自学中应该注意的事项之后,今天再来聊一下java中容易出现的基本问题吧。
首先基本类型和它的包装类我就不多说了,但是值得注意的是String,首先它并不是基本类型,其次它被定义为final类型(也就是说不可集成),为什么要把String定义为final
?,网上也有很多答案,比较好的答案是:主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。
再来说一下用String连接字符串的问题吧,一般大家习惯这样来new一个字符串对象
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"); } } }当把注释去掉后元素才会真正删除完。。
/** * 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); } }
输出结果显然和预期的结果就不符了,
关于优先级我想说的是为了尽量让程序清晰易读,请适当加上括号。关于优先级的图我就不上了,网上多的是。。
今天先说到这,如果大家有补充的欢迎在下面留言。。
关于操作符,线性表,优先级应该注意的东西,布布扣,bubuko.com
原文:http://blog.csdn.net/mark_wk/article/details/25410975