2012-01-18 140 views
1

Java中有不可变类型。如果您将不可变对象传递给方法,则在调用该方法后,即使该方法中的值已更改,该对象也不会更改。我知道所有的基元都是不变的。 String也是不可变的。
我写了一个简单的代码来检查Java中的功能,看起来基元的包装类也是不可变的。任何人都可以在java中列出所有不可变类型?java中的所有不可变类型

+3

原语不是不可变的。 “在他们接受某种方法后他们没有改变”这一事实是因为他们是通过价值传递的,而不是因为不可改变。 – amit 2012-01-18 06:54:38

+0

类似的问题:http://stackoverflow.com/questions/5124012/examples-of-immutable-classes – Azodious 2012-01-18 06:56:08

+0

什么理由知道这个列表? – Dapeng 2012-01-18 06:58:11

回答

4

它不会调用该方法时,即使它的价值在该方法改变后,被改变

与无法改变无关。

void change(SomeType st) { 
    st.setValue(123); 
} 

将改变真实的东西。虽然

void change(SomeType st) { 
    st = new SomeType(123); 
} 

不会。这里的区别在于您是在更改引用还是在引用的对象上进行操作。

字符串和那些包装类被称为immutable,因为绝对没有成员函数可以更改该对象,如setValue

希望你明白这一点。如果您有任何疑问,您可以自由发表评论和询问。

+0

我明白了,非常感谢。 – shift66 2012-01-18 07:01:32

-1

在jdk中提供的任何用于保存原始值的类都应该通过此列表。

示例 - 整数,长整数,双整数,字符串等。

+0

在Java中,原始类型是可枚举的:byte,short,int,long,char,float,double,bool。原始的和不变的是两个完全不同的东西。 – Haozhun 2012-01-18 07:03:39

+0

@Gene,你误解了陈述。任何一个表示原始值的类...我希望现在你明白了。 – 2012-01-18 07:07:19

+0

我还没有明白你的观点。对不起。但是,downvote由于超时而被锁定,现在我无法更改它。抱歉。 – Haozhun 2012-01-18 07:11:03

1

不,这是不可能的。

每个人都可以加入自己稳定的类型,我敢肯定每个不同版本的Java引入了一些新的

+0

是的我知道,我在谷歌搜索。我想知道所有已知的不可变类型。例如Integer。每个人都可以使用这种类型。看起来URI也是不可变的。它是否正确? – shift66 2012-01-18 06:59:40

+0

@Ademiban:它在哪里结束?每个人都可以使用Apache公共资源,如果不可变更也列出来了?> – amit 2012-01-18 07:04:10

+0

javadoc拥有所有的信息。来自URI javadoc:这个类的实例是不可变的。所以是的URI是不可改变的 – Peter 2012-01-18 07:05:48