1.Java中求数组char ch[]的长度(元素的个数): ch.length;求字符串s的长度:s.length();
2.arraycopy函数用于拷贝数组,定义如下:
static void (Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
src:要被复制的源数组
srcPos:要被复制的数组的起始位置,从0开始算
dest:复制到的目标数组
destPos:要放入的目标数组的位置,从0开始算
length:被复制的源数组的长度
NB:注意目标位置的元素将会被替换掉
eg:int a=new int[]{1,2,3,4,5}; int b=new int[]{6,7,8,9}
System.arraycopy(a,2,b,1,3);
这句之后,b={6,3,4,5}
3. byte b1=10+1;//通过
byte b2=2; byte b3=3;
byte b4=b2+b3;//出错,类型不兼容
byte b5=(byte)(b2+b3);//通过
问:b1的右边是加法,b4的右边也是加法,为什么第一句通过,美国服务器,第二句报错?
答:编译器在编译时,会将能够直接计算出来的数据先计算,便于提升效率。因此b1的右边,会被编译器看作11而不是10+1,编译器知道int类型的11转换成byte类型时,没有超过byte类型的表示范围,因此不报错;对于b4,由于b2和b3不是直接量,编译器在编译时不能直接识别b2+b3的值是多少,而在运行时才能够确定,因此编译器不能确定int类型值(b2+b3)在转换成byte类型时是否会超过byte类型的有效表示范围,又因为Java是一种安全的语言,因此编译器会报错,说不能转换成byte类型。而把右边强制转换成byte类型后,编译器的错误就消失了,就像b5一样。因为编译器知道是程序员让编译器这样做的,就算超过byte的表示范围,编译器也会忽略这个问题,因为编译器知道这个问题程序员已经考虑到了。
4. while(…){
if(…){
break;//这个break不是退出if,而是退出while循环
}
}
5.分析以下代码出错的原因:
Father.java:
public class Father {
private String name;
public Father(String name){
this.name=name;
}
}
Son.java
public class Son extends Father{}//报错
答:子类虽然什么都没写,但是系统会为子类添加一个默认的构造函数,如果这个构造函数没有this关键字,则第一句会调用父类的无参构造函数。而父类中没有无参构造函数,因此报错。英文的意思是:隐含的super()默认构造函数没有定义,必须定义一个隐含的构造函数。
记住:任何一个子类的构造函数,一定会调用父类的构造函数。
6.char[] c=new char[]{‘A’,’B’,’C’,’D’,’E’};
System.out.println(c);//输出c内的元素:ABCED
System.out.println(“char[] c:”+c);//输出char[] c:[C+地址(hashCode)
打印一个boolean的数组时,若参数直接为该数组,则打印结果为[Z@+地址
任何值与字符串想加得到的都是字符串
7. Java中的字符串(String)对象永不改变,只能复制
String s1=”abc”;
String s2=s1;
s1+=”def”;
System.out.println(s1);//abcdef>>>s1新开辟了一块空间存放结果
System.out.println(s2);//abc
8. String str1=”abc”; String str2=”abc”; str1==str2–>true
String str3=”a”+”bc”; str1==tr3–>true
String str4=str1+””; str1==str4–>false
Integer i1=12; Integer i2 =12; i1==i2–>true
Integer i3=128; Integer i4=128; i3==i4–>false
说明:str1的值“abc”放在堆中的常量池中,定义str2时,系统发现字面量”abc”已经在常量池中存在,因此直接将此返回给str2,于是str2和str2共享同一个字面量。创建str3时,编译器会把能够直接计算的值先算出来,因此在编译的时候就发现str3的值是“abc”,于是再将“abc”返回给str3。此时str1,str2,str3共享同一个变量,指向同一个地址。对于str4,编译的时候不能直接计算出它的值,因此需要重新去建一个对象,此时与str1,str2,str3的地址不等
漫无目的的生活就像出海航行而没有指南针