真的知道final的用法了吗?

今天晚上在网上看到一些讲基础的java知识的blog,自己便想了想真的知道了这些基础知识了吗?想想还是基础知识掌握的不好,在这里把自己遇到的问题写到blog里,一是希望自己以后一定要关注java的基础知识,定期看书复习,俗话说:“万丈高楼从地起”,只有掌握好了基础才能写出有质量的代码。二是如果有人和我一样不了解final的话,希望有所帮助。
    我们都知道finnal是用来定义常量的,一旦定义就不可以改变。这句话是正确的,但是,我们应该仔细分析这句话,定义常量有基本类型和引用类型,那对这两种类型的变量,什么才叫做一旦定义就不能改变呢?我们来看看这段代码:
	public static final int DEFAULT_NUM = 1;
	
	public static void changeNum(int num) {
		DEFAULT_NUM = 2;
	}

这个代码肯定是错误的。我们在来看另外一段代码:
	public static final Map<String, String> INFO_MAP = new HashMap<String, String>();
	
	static {
		INFO_MAP.put("s", "soong");
	}

啊?不是说finnal变量一旦第一就不可以改变吗?没错!这个观点是真确的(废话,全世界的java书都是这样讲的,呵呵),这里就体现了,对于基本数据类型来说一但定义,并且赋值后,是不能改变的,对于应用数据类型来说,不能改变不是指它的值不能改变,而是指它所指向的引用不能改变(这就是基本数据类型和引用类型的差别)。
   总结一句话:“finnal对于基本数据类型是值不能改变,而对于引用数据类型是其引用不能改变”。

你可能感兴趣的:(java,Blog)