day_08 刷题日记

1.执行以下程序后的输出结果是()D

public class Test {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A"); 
        StringBuffer b = new StringBuffer("B"); 
        operator(a, b); 
        System.out.println(a + "," + b); 
    } 
    public static void operator(StringBuffer x, StringBuffer y) { 
        x.append(y); y = x; 
    }
}


A,A
A,B
B,B
AB,B

这题不多说了,虽然没错,也拿出来记录一下。人类迷惑大赏,还记得在Java疯狂讲义的笔记中说StringBuffer是个可变类嘛,可变又是通过哪些方法实现的,还有印象的话这题就不会错;或者想想值传递,StringBuffer类的两个变量a和b是new出来的,传递的时候传递的是这个对象的地址值,append操作改变的是地址里面的值,y=x是改变引用地址,把y的地址改成x的了,但是b还是指向原地址,所以选D。

理解这个题,最好的办法可以在IDEA里面打个断点调试,再把StringBuffer换成String试试,比较一下就明白了。

2.下面代码将输出什么内容?

public class SystemUtil{
    public static boolean isAdmin(String userId){
        return userId.toLowerCase()=="admin";
    }
    public static void main(String[] args){
        System.out.println(isAdmin("Admin"));
    }
}

//false

第三行==后面的那个admin指向字符串常量池里admin的地址,而toLowerCase方法在源码中重新new String()返回的,指向的是这个字符串对象在内存中的地址。一个是堆区,一个是常量池,显然就不等。

那么下面的代码返回的是啥呢?答案是true

public class SystemUtil{
    public static boolean isAdmin(String userId){
        return userId.toLowerCase()=="admin";
    }
    public static void main(String[] args){
        System.out.println(isAdmin("admin"));
    }
}

不需要new String()返回新的对象,都指的是常量池里admin的地址,所以是true。

3.request.getHeader和request.getCookies都可以取得http请求中的cookie值。

4.有以下一个对象:

public class DataObject implements Serializable{
    private static int i=0;
    private String word=" ";
    public void setWord(String word){
        this.word=word;
    }
    public void setI(int i){
        Data0bject. i=I;
     }
}

创建一个如下方式的DataObject:

DataObject object=new Data0bject ( );
object. setWord("123");
object. setI(2);

将此对象序列化为文件,并在另外一个JVM中读取文件,进行反序列化,请问此时读出的Data0bject对象中的word和i的值分别为:D

", 0
"", 2
"123", 2
"123", 0

序列化保存的是对象的状态,静态变量属于类的状态,因此,序列化并不保存静态变量。所以i是没有改变的。

5.下面这条语句一共创建了多少个对象:String s=“welcome”+“to”+360。答案是1个。

String s = “a” + “b” + “c” + 360;编译器将其优化为String s = “abc360”,若常量池中不存在这个字符串则会常量池中创建一个对象,若存在则不创建。不过如果常量池中如果没有“welcome"和”to‘,那还得新建,答案就肯定不止1个了。这题也没说清楚。

6.Object里面没有copy()方法,有getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()。

7.私有线程区域:程序计数器、虚拟机栈、本地方法栈;线程共享区域:堆、方法区

8.java并发框架支持锁包括读写锁、自旋锁、乐观锁,这一块内容得补补深入理解JVM。

发布了58 篇原创文章 · 获赞 5 · 访问量 6264

猜你喜欢

转载自blog.csdn.net/weixin_40992982/article/details/104025085