java面试题整理

1、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。

2、Java中会存在内存泄露吗?
答:Java语言也存在内存泄露问题。Java语言提供了垃圾回收机制,它可以自动回收那些不再被使用的对象,以释放内存空间,但是也会存在编程导致的内存泄露问题,通常是不再使用的对象,但是程序又持有对该对象的引用,从而导致该对象无法被回收的情况称为内存泄露。

3、局部变量可以定义私有修饰类型吗?
下面代码要实现doSomething()方法中局部变量的定义,看看这段代码中的定义是否正确?

public class Something {
    void doSomething() {
        private String s = "";
        int l = s.length();
    }
}

答:这样编码是错误的,定义变量s的语句无法通过编译。局部变量前不能放置任何访问修饰符,包括private、public和protected,但是final可以用来修饰局部变量,但这样修饰后,它会变为常量。

4、用最有效率的方法算出2乘以16等于几?
解析:位运算的效率是最高的,所以要想找出最有效率的运算方法,应该从位运算入手,Java语言的位运算中提供了左移、右移和无符号右移运算符,它们分别是<<、>>、>>>。左移运算会把操作数变大,它相当于把左侧操作数乘以2的N次幂,这个N是由右操作数决定的。而右移运算恰恰相反,它实现的是除法。
答案:2 << 4

5、在Java1.6中byte、long和String类型是否可以作为switch语句的判断表达式。
解析:switch语句中的判断表达式类型是int,因此传递给switch和case语句的参数类型必须低于int类型。支持类型包括int、short、char和byte。但是long类型不可以,而String类型在Java1.6和之前的版本中都不支持。
答案:byte类型可以应用与switch语句中,但是long不可以,而String类型目前也不可以。

6、可以通过哪几种方式创建字符串
解析:在Java中使用String类来声明和创建字符串。要创建字符串可以通过多种方式实现。
(1)通过String类的构造方法可以创建字符串对象,例如:
String sVar = new String("good");          // 创建初始内容为good的字符串
(2)也可以通过为字符串变量赋值的方式来实例化字符串对象,例如:
String sVar = "good";                              // 声明字符串变量时为变量赋值来创建字符串
(3) 在Java中还可以通过方法调用来实例化字符串对象,例如:
int x=100;                                               // 创建整型变量x,其初值为100
String sVar = String.valueOf(x);             // 通过String类的valueOf方法实例化字符串对象
答案:在Java中可以使用3种方式来创建字符串对象,第一种是通过String类的构造方法来创建字符串对象,第二种是通过为字符串变量赋值字符串常量创建字符串对象,第三种方式是通过方法调用来实例化字符串对象。

7、说明Java中String str = null与String str = ""的区别。
解析:空字符串和赋值为null的字符串在使用中极易混淆。这是由求职者对空字符串的理解不够准确造成的。当一个字符串被赋值为null时,它并没有被分配任何的内存空间,而只是声明了一个字符串变量。空字符串拥有内存空间,它只是长度为0而已。求职者只有真正理解了空字符串的定义才能避免在使用空字符串过程中出现的不必要的问题。
答案:String str = null表示声明了一个String对象的引用str,但是没有为其分配内存空间,而String str = ""则表示创建了一个长度为0的空字符串,并在内存中为其分配了内存空间。

8、如何实现字符串的反向输出?
答案:在Java中没有为String类提供进行反向输出的方法,为此可以自己编写实现字符串反向输出的代码,下面是笔者使用的两种方法:
第一种方法就是使用String类的split()方法对字符串进行分隔,分隔后返回与该字符串对应的字符串数组,然后逆序输出字符串数组中的每个元素,从而可以实现字符串的反向输出。
第二种方法就是使用String类的charAt()方法通过字符串的索引值逆序输出字符串中的每一个元素,这样也可以实现字符串的反向输出。

9、使用运算符“==”和方法equals()比较对象的区别
答案:使用运算符“==”和方法equals()比较对象是有区别的,运算符“==”比较对象时,比较的是内存地址和内容,而方法equals()比较对象时,比较的是对象的内容,与地址无关。

10、在Java中如何判断字符串为空
解析:在Java语言中,字符串为空有两层含义,一种是空值null,另一种是0长度的空字符串。
1.使用String类声明字符串变量时,将其初始化为null,此时可以使用关系运算符“==”进行判断。
使用关系运算符判断字符串为空值null,代码如下:
String sVar = null;
if (sVar == null) {
         // 字符串为空时需要执行的代码
}
2.使用String类声明字符串变量时,为其指定了0长度的空字符串,此时可以使用equals()方法或使用length()方法进行判断。    使用equals()方法判断字符串是否为空,代码如下:
String sVar = "";
if (sVar.equals("")) {
         // 字符串为空时需要执行的代码
}
使用length()方法结合关系运算符“==”判断字符串为空,代码如下:
String sVar = "";
if (sVar.length() == 0) {
         // 字符串为0长度时需要执行的代码
}
答案:在Java中可以使用关系运算符“==”判断字符串是否为空值null,可以使用equals()方法,并为其传递一个空字符串作为实参,从而可以实现判断字符串是否为空的功能,或使用length()方法结合关系运算符“==”来判断字符是否为0长度,实现判断字符串为空的功能。

11、Java语言规范中,对equals()方法有何要求?                                                                                                                    (1)自反性:对于任何非空引用值x,x.equals(x)都应返回true;
(2)对称性:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true;
(3)传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。;
(4)一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改;
(5)对于任何非空引用值x,x.equals(null)都应返回false。

12、以下声明合法的是(B)

  A、default Strings;B、public final static nativeintw( )

  C、abstract doubled;D、abstract final double hyperbolicCosine( )

A不是,default不是合法修饰符(修饰符在不写的时候有默认值,但是default不是修饰符)
C不是,不存在abstract的变量,只有abstract方法
D不是,abstract和final不能同时出现,自相矛盾

13、ArrayList list = new ArrayList(20);中的list扩充几次

ArrayList list=new ArrayList(); 这种是默认创建大小为10的数组,每次扩容大小为1.5倍 
ArrayList list=new ArrayList(20); 这种是指定数组大小的创建,创建时直接分配其大小,没有扩充。 
所以,扩充为0次

你可能感兴趣的:(笔试与面试题)