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<stdio.h>
#include<iostream>
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
*/
以上仅是个人浅见,路过的大牛,请指教,谢谢。

浙公网安备 33010602011771号