11. 构造方法有哪些特性
答案:
名字与类名相同;
没有返回值,但不能用 void 声明构造函数;
生成类的对象时自动执行,无需调用。
12. 构造器(constructor)是否可被重写(override)?
答案:
Constructor 不能被继承,所以 Constructor 也就不能被 override。每一个类必须有自己的构造 函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数。
13. ==与 equals 的区别
答案:
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。equals 方法是由 Object 类提供的,默认的实现只有当对象和自身进行比较时才会返回 true, 这个时候和 “==”是等价的。可以由子类来进行重写。
举例:
String str1 = new String("abcd");
String str2 = new String ("abcd");
System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true
但是,如果按照下列方式,结果如下:
String str1 = "abcd"; String str2 = "abcd";
System.out.println(str1==str2);//true
这个时候,利用了 Java 常量池的机制,str1 和 str2 同时指向的是常量池中的同一块地址区 域。
14. 重写 equals 时要同时重写 hashcode 吗?
答案:
按照 Java 规范,两个对象是 equal 的,那么这两个对象的 hashCode 值也要相等的。
集合框架中,先根据 hashCode 来判断对象是否不相等,只要是不相等,就认为他们肯定不 是同一个对象,不再调用 equals 判断。
因此,要确保 equal 的对象拥有相同的 hashcode 是非常有必要的(反则未必)。
15. 是否可以继承 String 类?
答案:
不可以,因为 String 类是 final。
16. String s=new String("xyz");创建了几个字符串对象?
答案:
两个对象,一个是"xyz",一个是指向"xyz"的引用对象 s。在 jvm 的工作过程中,会创建一片的 内存空间专门存入 string 对象。我们把这片内存空间叫做 string 池。String s="Hello";当 jvm 看到"Hello",在 string 池创建 string 对象存储它,并将他的引用返回给 s。
17. 下面代码输出的结果是什么?
String s1="a";
String s2=s1+"b";
String s3="a"+"b";
System.out.println(s2=="ab");
System.out.println(s3=="ab");
答案:第一条语句打印的结果为 false,第二条语句打印的结果为 true。
Java 对字符串常量直接相加的表达式进行优化,s3 相当于直接定义了一个”ab”的字符串
18. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变 化后的结果,那么这里到底是值传递还是引用传递?
答案:
是值传递。Java 编程语言只有值传递参数,传参的本质是赋值。指向同一个对象,对象的内容 可以在被调用的方法中改变,但对象的引用是永远不会改变的。
值传递举例:
public static void main(String[] args) {
String word = "Hello";
change(word);
System.out.println("main() word is " + word);
}
public static void change(String word) {
word = "hello world";
System.out.println("change() word is " + word);
}
输出结果为:
change() word is hello world
main() word is hello
19. String 和 StringBuilder、StringBuffer 的区别?
答案:
String 的是不可变的;StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作, 特别是内容要修改时,那么使用 StringBuffer,线程安全;StringBuilder 与 StringBuffe 等价, 线程不安全,速度更快。
20. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?答案:
重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽” 了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则 称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。