试题内容:
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
//2
System.out.println(
"value="
+switchit(
4
));
//3
}
//4
public
static
int
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
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方法,源码如下
|