3

这个问题是对如何使用“”初始化字符串?

我想提请您注意,即使Integer, Double, Character, Float,Boolean包装类也可以以与声明相同的方式String声明:

String s = "Test string"

Integer i = 10; //valid
Double d = 10.00; //valid
Boolean b = true; //valid

这些班级是否也像String班级一样给予特殊待遇。

4

5 回答 5

4

正如我在之前的回答中指出的那样(如何使用“”初始化字符串?

是的,为了在 OOP 中保留primitive类型,设计师在它们之间架起了一座桥梁,primitives并且Object'sWrappers它们进行了特殊处理。

原因在 docs 中有清楚的解释

然而,使用对象代替原语是有原因的,Java 平台为每种原语数据类型提供了包装类。这些类将原语“包装”在一个对象中。通常,包装是由编译器完成的——如果您在需要对象的地方使用原语,编译器会为您将原语包装在其包装类中。同样,如果您在需要原语时使用数字对象,编译器会为您拆箱该对象。有关详细信息,请参阅自动装箱和拆箱

我们primitives在程序中广泛使用,因此允许类似的语法可能是一个设计决定

   Integer i = 10; //primitive style

然后在时间本身为imemory分配,因为它是一种类型,当他们发现类型声明带有compileprimitiveWrapperAssignment operator =

语法明智,更方便和快乐(至少对我来说:))。

比起写作,

   Integer i = new Integer(10); //Object creation style
于 2013-10-22T06:42:46.690 回答
3

以下所有这些陈述:

Integer i = 10; //valid
Double d = 10.00; //valid
Boolean b = true; //valid

由于自动装箱而有效

自动装箱是 Java 编译器在原始类型与其对应的对象包装类之间进行的自动转换

于 2013-10-22T06:37:56.327 回答
1

是的,原始 Wrapper 类的行为也类似于 String 类。

你可以像下面这样说明

Integer i1 = new Integer(10); //valid
Integer i2 =10;
System.out.println(i1==i2); // this one is false
i1=10;  
System.out.println(i1==i2); //// this one is true
于 2013-10-22T06:48:33.913 回答
0

String str = "Test String"; 特殊待遇是无关的,特殊待遇是Integer i = 10; 什么 String s = "Test String";?这些被称为字符串文字在 jvm 的字符串常量池中获取内存。就垃圾回收而言,一个特殊的意义是,池中的常量永远不会受到垃圾回收的影响。将“str”设为 null 不会使“测试字符串”符合垃圾收集条件。WHY?:: JVM 将来会尝试重用这个“测试字符串”。垃圾收集算法排除池内存中的对象。所以正常的 GC 规则在这里不适用。看看这个:为什么字符串文字没有被垃圾收集

现在,这种处理方式与 wrapper 的自动装箱有何不同。自动装箱是从JDK1.5开始引入的。自动装箱和自动拆箱Integer i = 10;编译器仅用 JVM 的内部缓存包装器对象替换此语句时,Integer i = Integer.valueOf(10); 其行为就像剩余的字符串文字一样。现在什么是内部缓存包装对象?

Integer i = 100;
Integer j = 100;

引用 i 和 j 使用单个预先存在的对象的地址给出。这就是为什么if( i==j) //true

Integer k = 130; 
if( i==k) // false

因为 k 的值超出了-128 to 127Integer 的缓存范围。检查这一点:当值范围为 -128 到 127 时的整数包装器行为 在上面,如果我们使引用 k 无效,那么它的对象将经历 GC,这与字符串文字的处理不同。如果我们使 i 或 j 无效,则相应的缓存对象永远不会受到 GC 的影响,这与字符串文字的处理方式相同。

于 2013-10-22T07:30:38.600 回答
0

所有原始类型的包装类都以这种方式运行。它被称为自动装箱,并在 java 1.5 中引入:

http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

于 2013-10-22T06:39:29.953 回答