面试复习

:"=="比较的是两个对象的地址,"equals()"比较的是两个对象的值. String 和 StringBuffer 的区别 StringBuffer是可变的而String是不可变的. 而且String用的多个的话会占用不同的内存. 如:String str = "bb"; str = "aa"; 前一个bb的内存地址不变,当又给它赋值为aa时它又指向aa的地址. 而StringBuffer就不会这样. String s1 = "hello";String s2 = "hello"; System.out.println("s1 == s2 ? " + (s1 == s2)); true Java会确保一个字符串常量只有一个拷贝 -按值传递时,实参本身的值不会随形参的改变而改变 按引用传递时,实参本身的值会随形参的改变而改变 二string不可变,stringbuffer可变(没有equals方法) public class Test { 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 这是Java参数传递(by value)造成的 而题目中第七行text = text.append (“C”),append方法会改变text中的值 而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。 string的值永远不会改变! String a = "a";//假设a指向地址0x0001, a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。 从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址 StringBuffer则不同,直接改变指向的地址中保留的值 还有 StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a"); s1.equals(s2)//为什么是false String s1 = new String("a"); String s2 = new String("a"); s1.equals(s2)//为什么是true StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较地址的,所以等于false. String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是true。 第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?   是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。 第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?   不对,有相同的hash code。 第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?   不能,一个对象的一个synchronized方法只能由一个线程访问。    第二十四,构造器Constructor是否可被override?   构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?   都不能 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?   Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。    equals() 和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。 第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱   sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级。   (b)正在运行的线程因为其它原因而阻塞。    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值