JAVA面试题(2)

JAVA面试题(2)

1.对于以下,有int x = 5, y =6, z;z = ++x + y++;z的结果下面正确是是()

A:10
B:8
C:11
D:12

答案:D 解析:
++x ,y++ 将 x = 5, y =6带入里面 得到 6 ,6 所以结果为12

2.代码如下int a=5;int b=++a;int c=a+(++b),C的正确结果是()

A:11
B:13
C:10
D:12

答案 B
解析: a=5; b=++a; // 相当于a=a+1;b=a; 结果是a=6,b=6 int c=a+(++b) //先计算
++b =6+1=7; c=6+7=13; 这个主要是考察 自增的运算, ++在变量前面就是先让变量+1 在运算;++在变量的后面就是 先运算。

3.下列运算符合法的是()

A.&&
B.<>
C.if
D.:=
答案:A
解析: Java 运算符可以分成以下
算术运算符,关系运算符,位运算符,逻辑运算符,赋值运算,其他运算符 经常提到的四大类为算数运算符、关系运算符、逻辑运算符、位运算符。
算数运算符(9):+ – * / % ++ — 关系运算符(6):== != > >= < <= 逻辑运算符(6):&& || ! ^ &
| 位运算符(7):& | ~ ^ >> << >>> &&是在编程中使用的一种符号。是逻辑(条件)与。 java 中没有<> :=
这种运算符,if else不算运算符

4.下列哪种说法是正确的( )

A. 实例方法可直接调用超类的实例方法
B. 实例方法可直接调用超类的类方法
C. 实例方法可直接调用其他类的实例方法
D.实例方法可直接调用本类的类方法
答案 D
解析: AC选项 如果方法是private 则不可以; B选项类父类的类方法是属于父类本身的;
D选项虽然类方法可以类名.类方法来调用 但是new 该类 的实例方法去调也不不会报错 ;
记住一句话:实例方法只能直接调用本类的方法,其他类的方法得需要引用调用

5. 计算2 << 3,下面正确的是()

A:6
B:54
C:8
D:16

答案D
解析: 2<<3; 表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8; 因为一个数左移 n位,就相当于 2的
n次方,那么一个数乘以 8只要将其左移 3位即可,而为运算符的效率最高,所以 2乘以 8等于几的最有效方法是 2<<3。

6:提供Java存取数据库能力的包是()

A.java.sql
B.java.awt
C.java.lang
D.java.swing

答案:A
解析 A存储在数据源(通常是一个关系数据库)中的数据的 API B
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类 C是提供利用 Java 编程语言进行程序设计的基础类 D
Swing是一个用于开发Java应用程序用户界面的开发工具包

7选择下面代码的运行结果:()

public class Test{
    public void method()
    {
        for(int i = ; i < 5; i++)
    {
            System.out.print(i);
    }
            System.out.print(i);
    }
}

A.122
B.123
C.编译错误
D.没有任何输出
答案:C
解析: 本试题属于 本身该试题就有严重的语法程序错误,并且没有主方法。

8.下面程序的运行结果是()

String str1 = “banalan”;
String str2 = “bana” + new String(“lan”);
System.err.println(str1 == str2);

A:true
B:false
C:不确定
答案:B
解析 对于字符串,==比较引用对象的内存地址,equals比较的是字符串的内容
String str1 = “banalan”; //一个对象 String str2 = “bana” + new
String(“lan”); //new了一个对象,总的就是2个对象 System.err.println(str1 == str2);
// ==是比较引用,两个对象的地址能一样么?只有重写equals比较内容(值)才能为TRUE

9.String能被继承吗?为什么?

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。平常我们定义的String
str=”a”;其实和String str=new String(“a”)还是有差异的。

前者默认调用的是String.valueOf来返回String实例对象,至于调用哪个则取决于你的赋值,比如String num=1,调用的是

public static String valueOf(int i) { 
return Integer.toString(i); 
}

后者则是调用如下部分:

public String(String original) { 
this.value = original.value; 
this.hash = original.hash; 
} 

最后我们的变量都存储在一个char数组中
private final char value[];

10.String, Stringbuffer, StringBuilder 的区别?

String
字符串常量(final修饰,不可被继承),String是常量,当创建之后即不能更改。(可以通过StringBuffer和StringBuilder创建String对象(常用的两个字符串操作类)。)
StringBuffer
字符串变量(线程安全),其也是final类别的,不允许被继承,其中的绝大多数方法都进行了同步处理,包括常用的Append方法也做了同步处理(synchronized修饰)。其自jdk1.0起就已经出现。其toString方法会进行对象缓存,以减少元素复制开销。

public synchronized String toString() { 
if (toStringCache == null) { 
toStringCache = Arrays.copyOfRange(value, 0, count); 
} 
return new String(toStringCache, true); 
}

StringBuilder
字符串变量(非线程安全)其自jdk1.5起开始出现。与StringBuffer一样都继承和实现了同样的接口和类,方法除了没使用synch修饰以外基本一致,不同之处在于最后toString的时候,会直接返回一个新对象。

public String toString() { 
// Create a copy, don’t share the array 
return new String(value, 0, count); 
}

如果觉得我写的还行,请关注我的公众号,每天定时推送干货.
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章