1.Object再带的方法有哪些?
1.equals
2.hashcode
3.clone
4.getClass
5.notify
6.notifyAll
7.wait
8.finalize
9.toString
2.读写一个完整限定名的java方法,可自创,可被写java类中的方法。
3.写一个比较完整的Collection接口的类图,并分别说一下区别
简答一点的话就是这样子
4.写一个比较完整的Map接口类图,并分析一下之间的区别
简单一点就是这样
5.java内存模型有几部分构成,并写出内存名称以及存储class文件中的数据类型
这里只贴了一张图片,只做简单了解,想深入了解的话,推荐这个博客
https://www.jianshu.com/p/a60d6ef0771b
6.分析代码,写出答案
String A = “a”;
A.replace("a","b");
system.out.println(A);
A对应的a的值存在了哪块内存?
方法区
代码执行完A的数数值为什么?请说出理由?
a 原因:replace方法并没有改变A的地址。
String B = new String(“a”);
system.out.println(A == B);
执行完毕后,输出true还是false,说出理由?
false A指向方法区,B指向堆。
A.intern()方法执行流程是怎样的?
6.1解析intern方法。
先看一下如下的代码
String str1 = new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern() == str1);
// jdk1.6 false
//jdk1.7 true
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern() == str2);
// jdk1.6 false
//jdk1.7 false
说明:在jdk1.6中,intern()方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中这个字符串实例的引用,而StringBuffer创建的字符串实例在java堆中,所以必然不是同一个引用,返回false。
而jdk1.7的intern()的实现不再是赋值实例,只是在常量池(方法区的一部分)中记录首次出现的实例引用,因此intern()返回的引用和由StringBuilder.创建的那个字符串时同一个。
对于str2比较返回false,因为“java”这个字符串在执行StringBuilder.toString()之前就已经出现过了,字符串常量池中已经有它的引用,不符合“首次出现”这个原则,而“计算机软件”这个字符串首次出现,因此返回true。