`

疯狂Java 程序员基本功的16课(对象与内存的控制)心得(三)

    博客分类:
  • j2se
 
阅读更多

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要先处理小范围的

大部分时候,如果循环体只包含一条语句,那么就可以省略花括号,但如果循环体内只包含是一条局部变量的定义语句,那么依然不可以省略循环体的花括号。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics