试题内容:
str+=' a'
int strlen = str.length
str=100
str=str+100
选项分析:
A项:如果不加空格则正确,如果加了空格,必须使用str += " a";。另外str+='a'与str+="a"都正确
B项: 在String类中有length()方法,正确应是str.length()。此处区分与数组中的length属性。
我们新定义一个数组:int [] a = new int[10]; System.out.println(a.length)我们可以注意到length是数组的属性而不是方法。
C项:int型转为String类型是str="100",String类型转为int类型:Integer.parseInt(String);
D项:正确的,但是这涉及的知识点是str=str+100后str的结果是:hello world100 在String中当我们执行"str+100"时会将100自动转型为String类型数据,实现字符串的拼接。
试题总结:
对于String类型的考查。此道题是经典:在日常编程中我们经常出错的就是:B 搞不清楚String.length还是String.length(),由于使用工具的原因这些细节常常忽略。通过本题的练习可以非常明确的是String类是length()方法。
C项考察的内容也是在编程中经常遇到的将String类型转化为int类型的,Integer.parseInt(String);
D项考察的内容也是在编程中经常遇到的和忽略的,"string类型数据+int型数据"int数据类型会自动转换为String类型数据。
Map map = new HashMap()
Map map = new TreeMap()
Map map = new ConcurrentHashMap();
Map map = Collections.synchronizedMap(new HashMap());
本题考察的是:集合map。map集合的分类:HashMap、HashStable、TreeMap。其中线程不安全的有:HashMap、TreeMap 线程安全的:HashStable。应用最多的是HashMap,map实现时多用该实现类,因为线程不安全,读取、存储效率更高些。关于集合应当掌握的知识点最为基础的是:map不是collections的子接口。List和set继承自collections 。
3.public class SwitchTest{ //1 public static void
main(String[] args) { //2 System.out.println( "value=" +switchit( 4 )); //3 } //4 public static int
switchit( int x)
{ int j= 1 ; switch (x)
{ case 1 :j++; case 2 :j++; case 3 :j++; case 4 :j++; case 5 :j++; default :j++; } return j+x; } } |
public class Square
{ long width;
public Square( long l)
{ width
= l; }
public static void
main(String arg[]) { Square
a, b, c; a
= new Square(42L);
b
= new Square(42L);
c
= b; long s
= 42L; } }
a == b s == a b == c a.equals(s) 答案:选择c 还有一点是Long类型数据是我们不常用的,较为陌生。 先来看一个知识点: 引用数据类型和基本数据类型的区别:
基本数据类型:在创建基本数据类型时,现在stack(栈内)分配内存。引用数据类型:在创建时,先在栈内分配一块内存
,而后在heap(堆)内分配一块新内存,存储其属性信息。
==与equals()方法区别是:对于基本数据类型是没有equals()方法的,且对于没有重写equals()方法的类会调用object类的equals()方法,所以
此处调用的是object类的equals方法。“==”对于基本数据类型是判断数据类型和数值是否相等。用于两个引用之间是判断堆中的内存是否相同
若相同则"=="返回值为true,若不同则返回值为false
对于程序的分析:
创建引用数据类型a,b,c先在stack(栈)中分配内存,当执行到new时会在heap(堆)中分配内存。c=b是给c在栈中分配一块内存与b同指向
一块堆内存。执行到long s = 42l s是基本数据类型,在栈中分配内存并存储s的值。
对于选项的分析:
A项:只要是new的都是重新创建一个引用类型的数据,所以A项不对
B项:s是基本数据类型,a是引用数据类型,两者数据类型不同,所以B项不对
C项:b、c指向同一块堆内存,所以返回值为true
D项:与B项相同的错误原因,两者是不同的数据类型。
这是我摘自牛客网的答案:http://www.nowcoder.com/profile/541356/wrongset/14115195?page=1&offset=6&tags= 多谢这哥们的贡献,写的
非常好。
如图所示:
![]()
来看4个选项:
A: a == b
由图可以看出a和b指向的不是同一个引用,故A错
B:s == a
一个Square类型不能与一个long型比较,编译就错误,故B错
c:b == c
由图可以看出b和c指向的是同一个引用,故C正确
d:a equal s
程序会把s封装成一个Long类型,由于Square没有重写Object的equals方法, 所以调用的是Object类的equals方法,源码如下
|