java基础巩固之试题练习(一)

时间:2023-02-14 20:50:58

试题内容:

1.java中 String str = "hello world"下列语句错误的是
str+=' a'
int strlen = str.length
str=100
str=str+100
本题的答案是:ABC 

选项分析:

  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类型数据。

 

2.线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?
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;
     }
}
第三行将输出什么?value=8
本题考察开关语句:x值为4,从case 4:开始执行,到执行default:j++结束,j累加为4,所以返回值为8.
开关语句还有一个考察点是:switch()内的表达式的值只可以是:byte、short、int、char类型,JDK1.7中还可以是String类型的。
在日常开发中注意:break何时使用。没有break该程序就会一直执行直到遇到“}”或default结束。

        4. 根据下面的程序代码,哪些选项的值返回true?
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
试题分析:本题考察点较多。分别有“==”和“equals()”方法的区别,基本数据类型和引用数据类型的区别,
还有一点是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=  多谢这哥们的贡献,写的
非常好。
这题考的是引用和内存。
//声明了3个Square类型的变量a,
b, c
//在stack中分配3个内存,名字为a,
b, c
Square
a, b, c; 
//在heap中分配了一块新内存,里边包含自己的成员变量width值为48L,然后stack中的a指向这块内存
a
new Square(42L);
//在heap中分配了一块新内存,其中包含自己的成员变量width值为48L,然后stack中的b指向这块内存
b
new Square(42L);   
//stack中的c也指向b所指向的内存
c
= b;
//在stack中分配了一块内存,值为42
long s = 42L; 
如图所示:
java基础巩固之试题练习(一) 
来看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方法,源码如下
1
2
3
  public boolean equals(Object obj) {
      return ( this == obj);
  }
其实就是判断两个引用是否相等,故D也错误。