说明:本文章的题目均为Java基础部分,不含其他部分内容,仅作记录使用。
一、选择题
1、下列java程序的输出结果为____。
public class Example{
String str=new String("hello");
char[]ch={'a','b'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='c';
}
}
//选项:
/*
A.hello and ab
B.hello and cb
C.hello and a
D.test ok and ab
E.test ok and cb
F.test ok and c
*/
正确答案为:B
分析:开头申明的字符串和字符串数组是引用数据类型的变量,但是字符串类型使用的是值传递,字符串变量使用的是引用传递。关于值传递和引用传递,简单来说,值传递传递的是值,在方法中进行操作时,不改变原本变量的值。引用传递传递的是引用,是对内存中的连续空间进行操作,会改变原本变量指向的空间的值。并且,char数组可以直接用输出语句输出所有元素。因此,第一个输出语句输出的是hello and ,第二个输出语句为cb,因此答案为B
2、
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);关于上面代码片段叙述正确的是()
/*
A.输出结果:13
B.语句:b6=b4+b5编译出错
C.语句:b3=b1+b2编译出错
D.运行期抛出异常
*/
正确答案为:C
分析:被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。Java中的byte,short,char进行计算时都会提升为int类型。
3、
//检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
/*
选项为:
A.0
B.1
C.2
D.3
*/
正确答案为:A
分析:首先,基本数据类型使用值传递,不会对值原本所在的变量的值进行改变,因此在执行完fermin方法后,主方法中i的值仍是0,然后对于i=i++的问题,请看https://mp.csdn.net/postedit/81020836这篇文章,i的值仍为0,因此最终i的值为0。