final修饰的方法不允许子类去覆盖,而且有些情况该方法对子类是不可以访问的,这有点像private ,
Set集合底层是Map的实现,Map底层是数组
用Iterator遍历list和Set时,List在遍历倒数第二个元素时,可以删除任意其他的元素,而不报java.util.ConcurrentModificationException,例如
ArrayList<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
list.add("444");
for(Iterator<String> iterator = list.iterator();iterator.hasNext();){
String el = iterator.next();
System.out.println(el);
if(el.equals("333")) {
list.remove(list.get(0));
}
}
System.out.println(list.toString());
//输出的结果如下:
/*
111
222
333
[222, 333, 444]
*/
Set集合则是在遍历最后一个元素时可以任意删除其他元素。
字符串常量池中常量如果以后也没有用到(即没有引用变量去引用该常量),jvm也不会去回收,这也是内存的泄露
表达式类型的自动提升:
//'a'+7先转换为int类型,后程序自动将基本数据类型再转换为字符串,104hello
System.out.println('a'+7+"hello");
//helloa7
System.out.println("hello"+'a'+7);
复合赋值运算符的陷阱:
你们可能都遇到这样的问题
short s = 5;
s = s-2;
s -=2;
会报编译错误,s = s-2是正常的类型自动转换int类型,所以会报错,但s -=2不会,因为java中特殊的复合赋值运算符,它不仅完成了相应的操作,而且还隐藏了一个强制转换的过程 E1 op= E2(op可以是+、-、%、/等),它相当于E1 = (E1类型)(E1 op E2);
if--else if --,if要先处理小范围的
大部分时候,如果循环体只包含一条语句,那么就可以省略花括号,但如果循环体内只包含是一条局部变量的定义语句,那么依然不可以省略循环体的花括号。