String a = “a”; String b = “a”; 这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。
但是 String a =new String( “a”); String b = new String( “a”); 这样是定义了两个堆内存对象,只能equals,不能==
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null,与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设为null,否则运行时会报空指针异常错误; HashMap线程不安全,Hashtable线程安全 一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性
A: 垃圾回收在jvm中优先级相当相当低。 B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。 C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。 D:进入DEAD的线程,它还可以恢复,GC不会回收,真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡,所以说这个方法是对象逃脱死亡命运的最后一次机会
垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation) (由一个Eden区和俩个survivor区组成)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。 年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。 年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收 永久代:存储的是final常量,static变量,常量池。 str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回 经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C
Serializable, Cloneable , Iterable , Collection , List , RandomAccess List接口是有序的,通常允许重复;ArrayList是实现List 接口的大小可变数组,查看手册: Note that this implementation is not synchronized. ArrayList的实现是不是线程同步的。
count = count++ 原理是 temp = count; count = count+1 ; count = temp;!!!
1.静态语句块中x为局部变量,不影响静态变量x的值 2.x和y为静态变量,默认初始值为0,属于当前类,其值得改变会影响整个类运行。 3.java中自增操作非原子性的 main方法中: 执行x–后 x=-1 调用myMethod方法,x执行x++结果为-1(后++),但x=0,++x结果1,x=1 ,则y=0 x+y+ ++x,先执行x+y,结果为1,执行++x结果为2,得到最终结果为3
A,Thread可以被继承,用于创建新的线程 B,Number类可以被继承,Integer,Float,Double等都继承自Number类 C,Double类的声明为 public final class Doubleextends Numberimplements Comparable final生明的类不能被继承 D,Math类的声明为 public final class Mathextends Object 不能被继承 E,ClassLoader可以被继承,用户可以自定义类加载器
servlet在多线程下其本身并不是线程安全的
A.私有方法只能在本类中可见,故不能继承,A错误 B.缺省访问修饰符只在本包中可见,在外包中不可见,B错误 C.保护修饰符凡是继承自该类的子类都能访问,当然可被继承覆盖;C正确 D.static修饰的成员属于类成员,父类字段或方法只能被子类同名字段或方法遮蔽,不能被继承覆盖,D错误
replaceAll方法的第一个参数是一个正则表达式