使用StringBuffer时应该注意的: StringBuffer sb = new StringBuffer('M'); sb.append("abc"); System.out.println(sb.toString());
该程序会输出什么呢? 不是 mabc 输入结果为: abc 为什么m没有输出来呢?奇怪了? 其实也不是很奇怪,StringBuffer没有字符为参数的构造方法,只有int作为缓冲区初始容量的构造器。 在本例子中, new StringBuffer('M') 返回的是一个具有初始容量77的空字符串缓冲区。
**2******************************************************************************************************************
下面的程序循环遍历byte数值,以查找某个特定值。这个程序会打印出什么?
结果什么都没有打印。 0x90是一个两位数的十六进制字面常量,每一个十六进制位都占据4个比特的位置, 所以整个数值也只占8个比特,即1个byte。问题在于byte是有符号类型,常量0x90是 一个正的最高位被置为8位int数值。合法的byte数值是从-128到+127,但是常量0x90等于+144
上面这个程序大家应该都能理解,但是下面整个判断是true还是false呢? ( (byte)0x90 == 0x90 ) ,当然是false啦,有点java基础知识的人都知道会转化成int比较的, 但转化后值是多少呢? 这个这个。。。。。hoho (byte)0x90 提升为int数值-122,而0x90为144
如果要实现比较,其实也很简单。
方法一: 只要我们相同的类型比较就可以啦,苹果跟苹果比较,桔子跟桔子比较。 最上面的程序改成: if (b == (byte)0x90) System.out.println("hello"); 这就可以打印出来了。
方法二: 可以用一个屏蔽码来消除符号扩展的影响,从而将byte转化为int,之后就可以拿到一个int与另一个int进行比较了。 if ( (b & 0xff) == 0x90) System.out.println("hello");
虽然上面的两种方法都可以,但是避免这类问题的最佳方法还是将常量值移到循环的外面,并在一个常量种定义它。
****3************************************************************************************** 下面的程序输入结果是什么呢?
乍一看应该慧是100吧。 毕竟做了100次循环增量。 结果确是0
j = j++; 整个操作细分开来大家都知道: int temp = j; j = j+1 ; j = temp;
那如果是这样那么结果就不用怀疑了,j=0
****4***************************************************************************
下面的程序输出什么呢?
应该是101吧,应该,那就是错啦,实际上是:在for循环中,出现了无限循环。 当i达到Integer.MAX_VALUE时,并且再次执行增量操作时,它就又绕回到了Integer.MIN_VALUE。 所以就出现无限循环。
求:寻找一种定义,使得下面的循环一直无限, (1). for(int i=start;i<=start+1;i++){} (2). while(i== i+1){} (3). while(i !=i ){} (4). while(i!= i + 0 ){},附加要求,不能使用浮点数类型 (5). while(i<=j && i>=j && i!=j ){} (6). while(i!=0 && i== -i ){}
解答(1):int start = Integer.MAX_VALUE-1; //不信你可以试一试 解答(2):可以用任何计算位无穷大的浮点算术表达式来实现: double i = 1.0/0.0; 一般都使用浮点数常量:double i = Double.POSITIVE_INFINITY;事实上,不必将i初始化为无穷大, 任何足够大的浮点数都可以实现这一目的。例如:double i = 1.0e40; 解答(3):double i=0.0/0.0; 即:double i = Double.NaN; 解答(4):把i定义成string类型就可以实现啦 解答(5):Integer i = new Integer(0); Integer j = new Integer(0); 解答(6):int i = Integer.MIN_VALUE; 或 long i = Long.MIN_VALUE;
寻找i一种定义,使得 if( i-i == 0 ){} if中的条件永远为false? 解答:double i=0.0/0.0; 即:double i = Double.NaN;
posted on 2009-04-07 22:49 胡鹏 阅读(276) 评论(0) 编辑 收藏 所属分类: java基础