java 外企面试_Java 外企面试若干题

1Which of the following fragments might cause errors? (5%)

A. String s = “Gone with the wind”;

String t = ” good “;

String k = s + t;

可以,String重载了+ 运算符

B. String s = “Gone with the wind”;

String t;

t = s[3] + “one”;

不可以,s[3]表示的是字符串数组s,而这里是字符串s。

C. String s = “Gone with the wind”;

String standard = s.toUpperCase();

可以

D. String s = “home directory”;

String t = s – “directory”;

不可以,String没有重载-运算符

2 public class Parent { (5%)

public int addValue( int a, int b) {

int s;

s = a+b;

return s;

}

}

class Child extends Parent {

}

Which methods can be added into class Child?

A. int addValue( int a, int b ){// do something…}

不行,访问权限不行默认为default

B. public void addValue (){// do something…}

可以,另外一种方法

C. public int addValue( int a ){// do something…}

可以,另外一种方法,当有同一种方法名时,以变量的个数的不同,选择方法,重载

D. public int addValue( int a, int b )throws MyException {//do something…}

不可以,异常在父类中不存在,所以抛出不行

E.public int addValue(int a,int b){//do something}

可以,重写了父类的方法

3 Given: (5%)

Exhibit:

public class Main {

public static void stringReplace(String text) {

text = text.replace('j', 'i');

}

public static void bufferReplace(StringBuffer text) {

text = text.append("C");

}

public static void main(String[] args) {

String textString = new String("java");

StringBuffer textBuffer = new StringBuffer("java");

stringReplace(textString);

bufferReplace(textBuffer);

System.out.println(textString + textBuffer);

}

}

/*运行结果:

javajavaC

*/

String类是不可变的类,是final类,而StringBuffer类是可以修改的,修改的是对象本身(个人理解,不对,请指教,谢谢)

What is the output?

4.对于

int a =4;

1).a+=(a++);

先a++,所以右边的值为4,之后左边的a=5,所以结果为a+5=9

2).a+=(++a);

先++a,所以右边的值为5,并且a=5,所以结果为a+5=10

以下编译出错:

3).(a++)+=a;

4).(a++)+=(a++);

5).(a++)+=(++a);

以下只能在C++中才能编译通过:

6).(++a)+=a;

先执行++a,此时a=5,之后该式子的右边的值为5,所以结果为a+5=10

7).(++a)+=(a++);

先执行左边的++a,a就变为5,之后执行a++,所以此式右边为5,之后a为6,所以结果就是a+5=11

8).(++a)+=(++a);

先执行++a,之后a=5,在执行++a,a=6,此时式子的右边的值为6,所以结果为a+6=12

总结:由于++的运算优先级高于+=,所以式子中先执行++的运算,之后在执行+=。

扩展:

9).a=(a++)+a

先执行a++,之后a=5,此时第一个括号的值为a,而此时第二个括号的式子的值为5,之后从右向左赋值给a,所以结果为a+5=10

10).a=(a++)+(a++)

先执行a++,之后a=5,此时第一个括号的值为a,在执行a++,之后a=6,而此时第二个括号的式子的值为5,之后从右向左赋值给a,所以结果为a+5=11

11).a=(a++)+(++a)

先执行a++,之后a=5,此时第一个括号的值为a,在执行++a,之后a=6,而此时第二个括号的式子的值为6,之后从右向左赋值给a,所以结果为a+5=11

12).a=(++a)+a

先执行++a,之后a=5,此时第一个括号的值为a,而此时第二个括号的式子的值为5,之后从右向左赋值给a,所以结果为a+5=10

13).a=(++a)+(a++)

先执行++a,之后a=5,此时第一个括号的值为a,在执行a++,之后a=6,而此时第二个括号的式子的值为5,之后从右向左赋值给a,所以结果为a+5=11

14).a=(++a)+(++a)

先执行++a,之后a=5,此时第一个括号的值为a,在执行++a,之后a=6,此时第二个括号的式子的值为6,之后从右向左赋值给a,所以结果为a+6=12

code:

#include

#include

using namespace std;

int main() {

int a = 4;

a += (a++);

printf("%d\n", a);

a = 4;

a += (++a);

printf("%d\n", a);

a = 4;

(++a) += a;

printf("%d\n", a);

a = 4;

(++a) += (a++);

printf("%d\n", a);

a = 4;

(++a) += (++a);

printf("%d\n", a);

a = 4;

a = (a++) + a;

printf("%d\n", a);

a = 4;

a = (a++) + (a++);

printf("%d\n", a);

a = 4;

a = (a++) + (++a);

printf("%d\n", a);

a = 4;

a = (++a) + a;

printf("%d\n", a);

a = 4;

a = (++a) + (a++);

printf("%d\n", a);

a = 4;

a = (++a) + (++a);

printf("%d\n", a);

return 0;

}

/*

9

10

10

11

12

9

10

11

10

11

12

*/

以上仅是个人浅见,路过的大牛,请指教,谢谢。

你可能感兴趣的:(java,外企面试)