java中易错点

1、A instanceof  B{这是没有好好利用java多态的表现}

  java中的二元操作符,测试A对象是否是B类的实例;

  返回值:boolean类型

2、“==”与 “equals”的区别:

  ==:是比较两个变量的值,并不涉及两个对象内容的比较;

  equals:比较两个对象的内容是否相同,实质比较的是:指向对象所在的内存地址;

  

package fdx.com.oneproblem;

public class OneTest {
	public static void main(String[] args){
		//==、equals的区别:
		String str = new String("123");
		String b = new String("123");
		if(str == b){
			System.out.println("==:"+true);
		}else {
			System.out.println("==:"+false);
		}
		if(str.equals(b)){
			System.out.print("equals:"+true);
		}else {
			System.out.println("equals:"+false);
		}
	}
}

 得到的结果:

==:false
equals:true

3、final关键字【修饰符】

  使得修饰的变量“不变”,当用来修饰对象时,就会是对象的引用不变,{引用本身不变、引用指向的对象不变}

 4、声明了什么?

  String str = "Hello World";

  描述:声明了一个String类型的对象引用变量str,内容是“Hello World”;而不是简单的描述:为声明了一个对象

5、str所指向的对象是否改变了呢?

  比如:String str = “Hello”;

     str = str + "World";

   描述:str原先指向一个String对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,str不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world",原来那个对象还存在于内存之中,只是str这个引用变量不再指向它(Hello)了;

  这样子的话会出现这样子的问题结论:【使用String来表示时不时发生变化的字符串的话,会造成内存的开销】如果经常对字符串进行各种各样的修改,或不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。

  如果遇到随时会变的字符串,那么需要使用StringBuffer来声明字符串,因为StringBuffer允许修改,而且不是每个不同的字符串都要生成一个新的对象。

原文地址:https://www.cnblogs.com/FanSunny/p/5564095.html