什么时候我应该去原始类型的包装类?或者我应该在什么情况下选择包装器/原始类型?
在C#中,我们有.Net类和短名称,如Double和double.有人回忆说我总是会使用短名称,想知道原因.我知道它们都是一样的,但为什么有时候比其他人更受欢迎呢?只是可读性还是还有更多内容?
例如,如果我创建一个具有字符串和布尔属性的类,则应始终使用以下哪个以及应该使用另一个:
Class MyClass {
...
private String x;
private Boolean y;
...
}
Run Code Online (Sandbox Code Playgroud)
要么
Class MyClass {
...
private string x;
private bool y;
...
}
Run Code Online (Sandbox Code Playgroud) 为什么Wrapper类(如Integer,Double等)没有内部原始值的setter是什么原因?
我问这个是因为这种功能会简化微积分,并使Java语言更灵活一些.
让我举几个例子.
1)我们来看下面的例子:
Integer x = new Integer(5);
x++;
Run Code Online (Sandbox Code Playgroud)
幕后的前一个代码是执行自动装箱.就像是:
int x_tmp = x.intValue();
x_tmp++;
x = new Integer(x_tmp); // Yes that's a new memory allocation
Run Code Online (Sandbox Code Playgroud)
由于这个问题,在Wrapper上执行微积分比在普通原始类型上执行要慢.使用setter,可以更容易地增加内部值,而无需在堆上分配另一个对象.
2)另一个困扰我的问题是,在Java中编写交换函数是不可能的,就像我在C(使用指针)或C++(指针或引用)中所做的那样.
如果我写,void swap(Integer x, Integer y)我无法访问内部值因为,并且我将无法交换值.
PS:我的一个朋友建议我应该考虑更大的图景,并考虑并发性和类型不变性.
所以你有解释吗?谢谢!