which three are valid declaraction of a float? A. float foo=-1; B. float foo=1.0; C. float foo=42e1; D. float foo=2.02f; E. float foo=3.03d; F. float foo=0x0123; 答案有A D F对的就不说了,b的1.0和c的42e1还有e的3.03都是double(没有特别指出的浮点数都是double型),
下面我对几个有把握的问题说一下: 14 which three are valid declaraction of a float? A. float foo=-1; B. float foo=1.0; C. float foo=42e1; D. float foo=2.02f; E. float foo=3.03d; F. float foo=0x0123; 为什么答案有A F啊!???? 尤其是A ????? B C 为什么不可以啊!? 答: 我认为答案为:B、E. 因为对于给一个primitive变量赋值,只要可以隐形转换就合法。如: float f; int i=10; f=i; //合法,隐形转换 而: i=f; //不合法,不能隐形转换。 上面的几个选项中,第一个:float foo=-1; -1为int类型 B. float foo=1.0; 1.0 为double类型,因为小数默认为double类型 //非法 C. float foo=42e1; D. float foo=2.02f; E. float foo=3.03d; //同B, F. float foo=0x0123; 其他几个合法,因为42e1为float,2.02f为float,0x0123 为int,只不过是16进制 16 public class Test{ 2) public static void main(String args[]){ 3) int i=oxFFFFFFF1; 4) int j=~i; 5) 6) } 7) } i=oxFFFFFFF1 还是int型吗! 没有越界吗!????还是long型的!?? 答: 没有越界,int 在java中是占32位,而上说0xFFFFFFF1为32位。 long占 64位。18. public class Test{ public static void add3(Integer i){ int val=i.intvalue(); val+=3; i=new Integer(val); } public static void main(String args[]){ Integer i=new Integer(0); add3(i); System.out.println(i.intvalue()); } } what is the result? A. compile fail B.print out "0" C.print out "3" D.compile succeded but exception at line 3 为什么是 B不是C啊!?? 答:答案为B。 因为在java中只有传值参数,上说的 public static void add3(Integer i){ int val=i.intvalue(); val+=3; i=new Integer(val); } 中,i在传进函数add3()中被复制成另一个局部变量Integer temp; 在函数add3()中成为了如下的形式: public static void add3(Integer i){ //这里只是模拟编译器的大致意思 Integer temp=i; //这个赋值语句应该在参数传到函数add3()中发生 int val=temp.intvalue(); val+=3; temp=new Integer(val); //函数结束,temp局部变量释放,此时,变量 i还是没变,这就是传 //值参数的本质 } 在java中只有传值参数,这是说传过来的参数的内容不能变。 对于引用参数,也是一样。但是引用的对象的内容可变。因为参数只是引用,只是指向一个地址,这个是不变的,但是这个被引用的对象的内容可变。这类似于C中的指针参数。 下面举个例子: Point p=new Point(2,3); pubic static void add3(Point p) { p.x=p.x+3; p.y=p.y+3; } Point p1=p; 此时:p1为点(5,6).是不是有点惊讶!!! 下面我们也来分析一下他的本质: public static void add3(Point p){ //这里只是模拟编译器的大致意思 Point temp=p; //这个赋值语句应该在参数传到函数add3()中发生 temp.x=temp.x+3; temp.y=temp.y+3; //函数结束,temp局部变量释放,此时,变量 p 的内容同样还是没变,这 //就是传值参数的本质 } 但是,p是指向一个Point对象的引用,也就是说p是指向了一个 Point的地址,而在add3(Point p)中Point temp=p;这里也是将上面的Point的地址给了temp变量,而对temp的改变是对上面的Point对象的改变,而p也是指向该对象,所以,p 对象所引用的对象内容发生了变化。 36. public class FooBar{ public static void main(String[] args){ int i=0,j=5; 4) tp: for(;;i++){ for(;;--j) if(i>j)break tp; } System.out.println("i="+i+",j="+j); } } what is the result? A.i=1,j=-1 B. i=0,j=-1 C.i=1,j=4 D.i=0,j=4 E.compile error at line 4 这种嵌套式的循环怎么做(看)比较快??答案:B。 想快点做这样的题目,必须首先仔细看题目: int i=0,j=5; 4) tp: for(;;i++){ for(;;--j) if(i>j)break tp; } 上面,我们看到两个for循环,都没有条件判断,即中间的语句被省略, for(;;i++),所以如果在内循环中没有if(i>j)break tp;则永远是死循环。所以,第一的循环执行一遍,然后执行内循环,而内循环没有判断条件,所以一直运行,直到,i>j退出,而此时i始终没有改变,所以,i=0;j=-1.
对不起,第14题上我犯了二个错误, 1.没看清题目,他是叫我们选赋值正确的,而我误认为是选错误的赋值语句 2. 42e1我起初认为float,我是看书中没有明确说它 是double类型,造成我得误解,然后,我通过一个小程序测试一下,发现它也是double类型。第14题,答案为:A 、D、F。 上面的几个选项中,第一个:float foo=-1; -1为int类型 B. float foo=1.0; 1.0 为double类型,因为小数默认为double类型 //非法 C. float foo=42e1; 42e1也为double类型。 D. float foo=2.02f; E. float foo=3.03d; //同B, F. float foo=0x0123;
A. float foo=-1;
B. float foo=1.0;
C. float foo=42e1;
D. float foo=2.02f;
E. float foo=3.03d;
F. float foo=0x0123;
答案有A D F对的就不说了,b的1.0和c的42e1还有e的3.03都是double(没有特别指出的浮点数都是double型),
14 which three are valid declaraction of a float?
A. float foo=-1;
B. float foo=1.0;
C. float foo=42e1;
D. float foo=2.02f;
E. float foo=3.03d;
F. float foo=0x0123;
为什么答案有A F啊!???? 尤其是A ????? B C 为什么不可以啊!?
答:
我认为答案为:B、E.
因为对于给一个primitive变量赋值,只要可以隐形转换就合法。如:
float f;
int i=10;
f=i; //合法,隐形转换
而:
i=f; //不合法,不能隐形转换。
上面的几个选项中,第一个:float foo=-1; -1为int类型
B. float foo=1.0; 1.0 为double类型,因为小数默认为double类型 //非法
C. float foo=42e1;
D. float foo=2.02f;
E. float foo=3.03d; //同B,
F. float foo=0x0123;
其他几个合法,因为42e1为float,2.02f为float,0x0123 为int,只不过是16进制
16
public class Test{
2) public static void main(String args[]){
3) int i=oxFFFFFFF1;
4) int j=~i;
5)
6) }
7) } i=oxFFFFFFF1 还是int型吗! 没有越界吗!????还是long型的!?? 答:
没有越界,int 在java中是占32位,而上说0xFFFFFFF1为32位。
long占 64位。18. public class Test{ public static void add3(Integer i){
int val=i.intvalue();
val+=3;
i=new Integer(val);
} public static void main(String args[]){
Integer i=new Integer(0);
add3(i);
System.out.println(i.intvalue());
} }
what is the result?
A. compile fail B.print out "0" C.print out "3"
D.compile succeded but exception at line 3
为什么是 B不是C啊!??
答:答案为B。
因为在java中只有传值参数,上说的
public static void add3(Integer i){
int val=i.intvalue();
val+=3;
i=new Integer(val);
}
中,i在传进函数add3()中被复制成另一个局部变量Integer temp;
在函数add3()中成为了如下的形式:
public static void add3(Integer i){
//这里只是模拟编译器的大致意思
Integer temp=i; //这个赋值语句应该在参数传到函数add3()中发生
int val=temp.intvalue();
val+=3;
temp=new Integer(val);
//函数结束,temp局部变量释放,此时,变量 i还是没变,这就是传
//值参数的本质
}
在java中只有传值参数,这是说传过来的参数的内容不能变。
对于引用参数,也是一样。但是引用的对象的内容可变。因为参数只是引用,只是指向一个地址,这个是不变的,但是这个被引用的对象的内容可变。这类似于C中的指针参数。
下面举个例子:
Point p=new Point(2,3);
pubic static void add3(Point p)
{
p.x=p.x+3;
p.y=p.y+3;
}
Point p1=p;
此时:p1为点(5,6).是不是有点惊讶!!!
下面我们也来分析一下他的本质:
public static void add3(Point p){
//这里只是模拟编译器的大致意思
Point temp=p; //这个赋值语句应该在参数传到函数add3()中发生
temp.x=temp.x+3;
temp.y=temp.y+3;
//函数结束,temp局部变量释放,此时,变量 p 的内容同样还是没变,这
//就是传值参数的本质
}
但是,p是指向一个Point对象的引用,也就是说p是指向了一个 Point的地址,而在add3(Point p)中Point temp=p;这里也是将上面的Point的地址给了temp变量,而对temp的改变是对上面的Point对象的改变,而p也是指向该对象,所以,p 对象所引用的对象内容发生了变化。
36. public class FooBar{
public static void main(String[] args){
int i=0,j=5;
4) tp: for(;;i++){
for(;;--j)
if(i>j)break tp;
}
System.out.println("i="+i+",j="+j);
}
}
what is the result?
A.i=1,j=-1 B. i=0,j=-1 C.i=1,j=4 D.i=0,j=4
E.compile error at line 4 这种嵌套式的循环怎么做(看)比较快??答案:B。
想快点做这样的题目,必须首先仔细看题目:
int i=0,j=5;
4) tp: for(;;i++){
for(;;--j)
if(i>j)break tp;
}
上面,我们看到两个for循环,都没有条件判断,即中间的语句被省略,
for(;;i++),所以如果在内循环中没有if(i>j)break tp;则永远是死循环。所以,第一的循环执行一遍,然后执行内循环,而内循环没有判断条件,所以一直运行,直到,i>j退出,而此时i始终没有改变,所以,i=0;j=-1.
1.没看清题目,他是叫我们选赋值正确的,而我误认为是选错误的赋值语句
2. 42e1我起初认为float,我是看书中没有明确说它 是double类型,造成我得误解,然后,我通过一个小程序测试一下,发现它也是double类型。第14题,答案为:A 、D、F。
上面的几个选项中,第一个:float foo=-1; -1为int类型
B. float foo=1.0; 1.0 为double类型,因为小数默认为double类型 //非法
C. float foo=42e1; 42e1也为double类型。
D. float foo=2.02f;
E. float foo=3.03d; //同B,
F. float foo=0x0123;
答:String是一个类,下面所说的原则对所有类实例变量都适用。变量可以默认初始化,但必须在类里,在方法里定义的变量不能进行默认初始化。