黑马程序员——JAVA中易出现的小问题(二)

来源:互联网 发布:中国同性题材网络剧 编辑:程序博客网 时间:2024/06/15 23:28

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

 

第一:char字符转换
public class Text {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        String s="ABC";
        char[] number={'1','2','3'};
  System.out.print(s+" ease as "+number);
       
 }

}
该程序打印的是:ABC ease as [C@1542a75
char数组不是字符串,想要将一个char数组转换成一个字符串,就要调用String.valueof(char[])方法。某些类库中的方法对char数组提供了类似字符串的支持,通常是提供一个object版本的重载方法和一个char[]版本的重载方法。改:
public class Text {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        String s="ABC";
        object number=new char[]{'1','2','3'};
  System.out.print(s+" ease as ");
             System.out.println(number);
       
 }

}
第二:比较方法(equals)
public class Text {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        final String pig="length: 10";
        final String dog="length: "+pig.length();
        System.out.print("Animal are equal:"+pig==dog);
       
 }

}
程序的结果是;false
在比较对象引用时,应该优先使用equals方法而不是==操作符。除非需要比较的是对象的标识而不是对象的值,另外,字符串连接的优先级不应该和加法一样。改:
System.out.println("Animal are equal:"+pig.equals(dog));

第三:字符转化
public class Text {
   
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        byte bytes[]=new byte[256];
        for(int i=0;i<256;i++){
         bytes[i]=(byte)i;
         String str=new String(bytes);
         for(int i=0,n=str.length();i<n;i++)
          System.out.print((int)str.charAt(i)+"");
        }
 }

}
每当要将一个byte序列转换成一个String时,你都在使用一个字符集,不管是否显示指定了它。指定byte数组来构造一个新的String时,该新String的长度是字符集的一个函数,因此,它可能不等于byte数组的长度。
第四:块注释符
public class Text {
 public static void main(String[] args) {
 System.out.print(classify('n')+classify('+')+classify('2'));
 }
 static String classify(char ch){
  if("0123456789".indexOf(ch)>=0)
   return "NUMERAL";
  if("abcdefghijklmnopqrstuvwxyz".indexOf(ch)>=0)
   return "LETTER";
 /* (Operators not supported yet)
    if("+-*/".indexOf(ch)>=0)
     return "OPERATOR";
    */
  return "UNKNOWN";
 }

}
这个错误很简单,只是告诉你,块注释(/*  */)不可靠地注释掉代码,应该用单行的注释(//)序列来代替;
第五:赋值
public class Text {
 public static void main(String[] args) {
 int j=0;
 for(int i=0;i<100;i++)
 System.out.print(j);
 
 }
 

}
程序重复100次之后,还是等于0;
修正该程序非常简单:
for(int i=0;i<100;i++)
j++;
不要再单个表达式中对相同的变量赋值超过一次;

第六:符号运算以及替换
public class Text {
 public static void main(String[] args) {
 int minutes=0;
 for(int ms=0;ms<60*60*1000;ms++)
  if(ms % 60*1000 ==0)
   minutes++;
 System.out.print(minutes);
 }
 

}
循环体看起来是每当毫秒计数器的计数值是60000的倍数,对分钟计数器执行增加量操作,这在循环生命周期内总共发生了3600000/60000次,即60次;但是打印的是6000;这是因为表达式【(ms %60 *1000】!=【(ms % 60000)】
改正:
public class Text {
 private static final int MS_PER_HOUR=60*60*1000;
 private static final int MS_PER_MINUTE=60*1000;
 public static void main(String[] args) {
 
  int minutes=0;
 for(int ms=0;ms<MS_PER_HOUR;ms++)
  if(ms % MS_PER_MINUTE ==0)
   minutes++;
 System.out.print(minutes);
 }
 

}

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------