先看这段小程序
class Question1{
public static void main(String[]args){
byte a=1000; //x1
long b=123456789012345789; //x2
System.out.println(a);
System.out.println(b);
}
}
这段程序在编译时,java首先指出变量b有问题,而不是a,在b后加上L,继续编译,java才指出a有问题;难道不是先执行语句x1,在执行x2吗?
下面这是关于构造函数的问题:
public class Question2{
int a;
Question2(){
a=10;
System.out.println("hello");
}
public static void main(String[]args){
Question2 ob=new Question2();
System.out.println(ob.a);
}
}
这段程序编译执行后会输出"hello"和"10",ob不是只引用了a吗?为什么连hello也输出了呢?
接下来的这个问题是关于for循环的:
class Question3{
public static void main(String[]args){
for(int a=1;a<=3; a++){ //x1
for(int b=1; b<=a; b++){ //x2
System.out.println('*'); //x3
}
System.out.println(); //x4
}
}
}
这段程序按照书本的说法应输出如下:
*
* *
* * *
但实际结果并非如此,而是
*
*
*
*
*
*
先不管输出结果,在两个for循环中:当a=1时,b=1,那么打印出一个‘*’,但当b自加1时,b<=a为false,这是执行x4后,a=2,b=1,接下来不应还输出一个'*'么?为什么是两个呢?
另外,a,b的值与*号有什么关系?为什么它们的值增加时,*的数目也跟着增加?怎样才能得出像书本所说的那种结果?
And one more question:
class Question4{
public static void main(String[]args){
int x=1;
for(int i=1;i<=10;i++){
while(x<50){
x+=1;
if(i*x++>40)break;
System.out.println(i*x+++" ");
}
}
}
}
这段程序的输出结果如下:
3 6 9 12 15 18 21 24 27 30 33 36 39
第一个结果是3这应没问题,第二次循环时x的值为3,i*x++无论是i乘x后再自加1,还是x自加1再与i相乘,这是的值都应为4,为什么会是6呢?
请各位高手多多指教,这里先谢过了。 |