|
该文章原出处 懒刺猬的BLOG 地址:http://blog.sina.com.cn/u/1224649382
16.
1) public class Test{ 2) public static void main(String args[]){ 3) int i=oxFFFFFFF1; 4) int j=~i; 5) 6) } 7) } which is decimal value of j at line 5? A. 0 B.1 C.14 D.-15 E. compile error at line 3 F. compile error at line 4
题意: 第5行上j的十进制数值是哪个
分析: 此题考察的是位运算符,位运算针对二进制数,所以先把运算的对象转换为二进制然后运算,0x打头的是16进制数,转为二进制比较简单,0XFFFFFF1等于二进制的1111 1111 1111 1111 1111 1111 0001,~运算是求补其实就是把对应1的位改为0对应0的位改为1所以结果为:0000 0000 0000 0000 0000 0000 1110,其十进制数为2^3+2^2+2=14。其他位运算符为与&或|异或^,请大家参考教材。
解答: C
注意: 需要注意的是负数的运算,
示例: w16.java
17.
float f= 4.2F; Float g=new Float(4.2F); Double d=new Double(4.2); Which are true? A. f==g B. g==g C. d==f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
题意:哪些是真值
分析: ==是比较运算符,当比较的是基本数据类型时,会根据数据类型自动转换规则将==两边的数据转换一致然后比较其值。但比较的是对象的时候,其比较的内容并不是对象的值,而似乎是对象的引用(此处有待商榷)所以只有指向同一对象的引用才会比较出true值。equals是Object及其派生类的函数,是比较对象是否相等,查看java文档可知,首先()内是一个对象,而且当且仅当对象非空同时对象类型与调用equals的对象类型一致而且值相等的情况下,函数才会返回true。但是很多object的子类重载了这个方法,所以具体用法要看使用他的类的定义。比如String类的equals方法可以接受字符串也可以接受String对象。
解答: B肯定没错了。A、C的错误在一个基本数据类型没办法和一个对象比较,编译就会出错。D、F的错误是()内放如的不是对象而是基本数据类型,编译也回出错。而E在语法上是正确的但结果却是false,因为g和d的对象类型不一致。
注意:
示例: w17.java
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
题意: 结果是什么?
分析:考察的是所谓 pass by value概念。
解答: main()中的i值为0,add3中的值为3,打印输出的是main()中的i所以答案是B
注意: 当对象作为一个函数的参数传递时,如果函数改变了对象的数据成员,那么返回后对象的数据成员会接受改变,但是函数不能改变对象的引用。参数传递的是基本数据成员时,传递的是值。
示例: w18.java
19.
public class Test{ public static void main(String[] args){ System.out.println(6^3); } } what is output?
题意: 输出什么?
分析: 6的二进制数为110,3的二进制为011,异或结果为101,换为十进制为5
解答: 5
注意: 还是提醒注意负数的计算,比如-6^3。1111 1010 ^ 0000 0011 = 1111 1001 = -7
示例: w19.java
20.
public class Test{ public static void stringReplace(String text){ text=text.replace('j','l'); } public static void bufferReplace(StringBuffer text){ text=text.append("c"); } public static void main(String args[]){ String textString=new String("java"); StringBuffer textBuffer=new StringBuffer("java"); StringReplace(textString); bufferReplace(textBuffer); System.out.println(textString+textBuffer); } } what is the output?
题意: 输出是什么?
分析: String类和StringBuffer类的主要区别就是是否可变,可以这样理解,String的各种方法并不改变自己的值,而是产生新的String对象,而StringBuffer的各种方法改变的就是他本身的值。
解答: 在stringReplace()中text.replace('j','l')产生一个值为“lava”的新的String对象,然后text引用这个新的String对象,这对textString没有影响。而bufferReplace() 中text引用的是textBuffer对象。text.append("c")改变的是textBuffer的值,结果是打印出javajavac
注意:
示例: w20.java |