JAVA的可变类与不可变类】的更多相关文章

转自: http://www.blogjava.net/hilor/articles/150610.html 可变类和不可变类(Mutable and Immutable Objects)的初步定义:可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容.不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容.不可变类的实例一但创建,其内在成员变量的值就不能被修改. 如何创建一个自己的不可变类:.所有成员都是private.不提供对成员的改变方法,例如:setXXXX.确…
String类是Java中的一个不可变类(immutable class). 简单来说,不可变类就是实例在被创建之后不可修改. 在<Effective Java> Item 15 中提到了为了使类成为不可变,需要遵循的五条规则: 不要提供任何会修改对象状态的方法. 保证类不会被扩展. 使所有的域都是final的. 使所有域都成为私有的. 确保对于任何可变组件的互斥访问. 不可变类有许多优点,不可变类比可变类更加易于设计.实现和使用,不容易出错,且更加安全. Java把String类设计为不可变…
在面试中经常遇到这样的问题:1.什么是不可变对象.不可变对象有什么好处.在什么情景下使用它,或者更具体一点,java的String类为什么要设置成不可变类型? 1.不可变对象,顾名思义就是创建后的对象不可以改变,典型的例子有java中的String类型. 2.相比于可变对象,不可变对象有很多优势: (1)不可变对象可以提高String Pool(字符串常量池)的效率和安全性.如果你知道一个对象是不可变动 ,那么需要拷贝的对象的内容时就不用复制它本身二只是复制它的地址,复制地址(通常一个指针的大小…
原文地址:# Why String is immutable in Java? 众所周知,String类在Java中是不可变的.不可变类简单地说是实例不可修改的类.对于一个实例创建后,其初始化的时候所有的信息都不能被修改.不可变类有很多的好处,本文简述为什么String类要设计成不可变类.本文将从内存,同步性,数据结构的角度说明不变性的概念. 1.字符串常量池的需要 String常量池是方法区的一个特殊的储存区.当新建一个字符串的时候,如果此字符串在常量池中早已存在,会返回一个已经存在字符串的引…
1.可变类和不可变类(Mutable and Immutable Objects)的初步定义: 可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容. 不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容.不可变类的实例一但创建,其内在成员变量的值就不能被修改. 2.如何创建一个自己的不可变类: 所有成员都是private 不提供对成员的改变方法,例如:setXXXX 确保所有的方法不会被重载.手段有两种:使用final Class(强不可变类),或者将所有类方法加上…
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考虑怎么做 面向对象:OOP:以对象(谁)为主,考虑谁来做,谁能做 类:是一类具有相同特性的事物的抽象描述,是一组相关属性和行为的集合 对象:是一类事物的具体体现.对象是类的一个实例,必然具备该类事物的属性和行为. 属性:事物的状态信息. 行为:事物能够做什么. [修饰符]class 类名 {//类名…
为什么String类是不可变的? String类 什么是不可变对象 当满足以下条件时,对象才是不可变的: 对象创建以后其状态就不能修改. 对象的所有域都是final类型的. 对象是正确创建的(在对象的创建期间,this引用没有逸出). 这是<Java并发编程实战>一书中的定义.在书中,说明并不是一定要将所有的域都设为final类型,比如String类就是这种情况,String会将散列值的计算推迟到第一次调用hashCode()时进行,并将计算得到的散列值缓存到非final类型的域中,但这种方式…
冒泡排序.Arrays工具类.方法可变参数 冒泡排序之前写过,略 Arrays工具类 二分法查询 public static int binarySearch(int[] a,int key) 头信息 二分查找法源码分析  native :本地方法修饰符 本地方法都是没有方法体的 ==判断引用数据类型相等不行,用equals判断 方法的可变参数   如: (int... arg) 放最后,可变参数相当于数组.…
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String s2 = “hello”:结论:s1 == s2. 字符串常量放在data区. 3. String s3 = new String("hello"); String s4 = new String("hello");结论:s3 != s4.但s3.equals(s4).…
要区别一个模块是否设计良好,最重要的因素是,对于其他模块而言该模块隐藏其内部数据和其他实现细节的程度.设计良好的模块应该隐藏所有实现细节,将API与其实现清晰地隔离开来.这样,模块之间通过他们的API进行通信,而不必知道其他模块的内部工作情况.这个概念被称为信息隐藏(information hiding)或封装(encapsulation),是软件涉及的基本原则之一. 信息隐藏之所以重要有许多原因,大多数原因都源于这样一个事实:它可以将组成系统的各个模块解耦,使得这些模块可以独立地开发.测试.优…