Tiger学习 之 primitive and wrapper<boxing>

本文介绍Java中自动装箱和拆箱的过程,包括基本类型的包装类如何在-128到127范围内被复用以提高效率,以及在不同范围内的包装类实例比较时的行为差异。同时探讨了自动装箱与拆箱在不同场景的应用。
java 99% 是对象处理的,还有1%是primitive(int,short,char...等字面值)的处理,与之相对的wrapper class 是Integer,Short,Character...等,因此,总需要要在primitive和wrapper之间不断的转换...

Tiger来使用boxing和unboxing来解决这个问题...自动执行这些转换...即autoboxing和auto-unboxing..

1.primitive to wrapper
[quote]
[color=blue]//Tiger之前定义个Integer必须如下[/color]
Integer i = new Integer(100);
[color=blue]//Tiger只需这样[/color]
Integer i = 100;
int j = 100;
Integer x = j;
[/quote]
还有,JVM将特定primitive都给box成相同的不可变的wrapper对象(ture,false -128——127,部分char),放在缓存...高效率。
看下面两个例子..
[quote]
Integer counter1 = 100;
Integer counter2 = 100;
System.out.print("counter1 == counter2: " );
System.out.println(counter1 == counter2);

Integer counter3 = 256;
Integer counter4 = 256;
System.out.print("counter3 == counter4: ");
System.out.println(counter3 == counter4);
[/quote]
结果输出:
[quote]
counter1 == counter2: true
counter3 == counter4: false

[/quote]
Why?
[color=blue]因为counter1 和counter2 的值在-128——127之间,是不可变的wrapper,所以会将Integer boxing 成int类型,然后进行比较,所以是相等的。[/color]
[color=blue]因为counter3 和counter4 的值不在-128——127之间,没有将Integer进行boxing因此比较的还是对象(两个对象是在不同的内存空间),所以不相等的。[/color]
2.wrapper to primitive
[quote]
Integer j = 100;
int i = j;[color=blue]//自动将wrapper转换为primitive[/color]
[/quote]
但是如果是这样..
[quote]
Integer j = null;
int i = j;[color=blue]//将抛出NullPointerExcepion异常,所以建议初始换wrapper对象的值.[/color]
[/quote]

3.wrapper的递增与递减
wrapper对象也可以递增与递减,如
[quote]
Integer counter = 1;
counter++;
--counter;
[color=blue]//先把Integer先unboxing成int,递增或递减,然后再boxing回去[/color]
[/quote]

4.Boolean and boolean
通过Boolean 也可以直接使用逻辑运算符(||、&&、!....),先unboxing成primitive(不可变的wrapper),再做比较...如
[quote]
Boolean case1 = true;
Boolean case2 = true;
Boolean case3 = false;
[color=blue]//Boolean对象先会被unboxing成primitive,然后进行比较,再boxing最后值成为Wrapper对象赋值给result[/color]
Boolean result = (case1 || case2) && case3;
[/quote]
<think>好的,我现在需要帮用户将Oracle Java 21官方API文档中的Integer类描述翻译成通俗中文,同时保留HTML代码结构,方便用户复制粘贴。首先,我得仔细阅读用户提供的英文原文,理解每个段落和标签的作用。 第一段提到Integer类包装了基本类型int的值,这里要注意术语的准确性,比如“wraps”翻译成“封装”比较合适。然后是关于对象包含一个int类型的字段,这部分需要保持技术描述的清晰。 接下来,第二段说明这个类提供了转换方法,比如int到String和String到int,还有一些有用的常量和方法。这里要确保方法名和术语正确,比如保留code标签内的内容,如<code>int</code>和<code>String</code>,不进行翻译。 第三段涉及value-based类的说明,需要解释清楚程序员应如何对待相等的实例,避免用于同步。这里可能会有用户不太熟悉的术语,比如“value-based”,需要参考官方文档的翻译习惯,可能译为“基于值的类”。同时,链接部分要保持原样,如href属性中的地址,不能修改。 第四段是实现的注释,提到“bit twiddling”方法,比如highestOneBit和numberOfTrailingZeros,这些方法基于Henry S. Warren的书籍。这里“bit twiddling”可能需要意译为“位操作”或者“位运算”,而书名保留英文,但用斜体表示。 在翻译过程中,需要注意保留原有的HTML结构,比如<p>标签、<a>链接和code标签。同时,用户要求使用通俗中文,所以避免过于生硬的直译,保持语句通顺自然。例如,“unpredictable behavior may occur”可以译为“可能会导致不可预测的行为”。 另外,检查是否有遗漏的部分,比如类名、方法名和链接是否正确保留,确保翻译后的内容与原意一致。还要注意标点符号和格式,比如中文句号与英文句号的使用,以及段落的分隔是否符合HTML结构。 最后,通读一遍翻译后的内容,确认技术术语准确,语句流畅,HTML结构完整,用户可以直接复制粘贴使用。如果有不确定的地方,比如某些术语的官方译法,可能需要查阅Java官方中文文档进行对照,确保一致性。</think>这是保留HTML结构的通俗中文翻译(可直接复制粘贴): ```html <code>Integer</code> 类将基本类型 <code>int</code> 的值包装成一个对象。<code>Integer</code> 类型的对象包含一个类型为 <code>int</code> 的字段。 <p>此外,该类提供了多种将 <code>int</code> 转换为 <code>String</code> 以及将 <code>String</code> 转换为 <code>int</code> 的方法,同时还包含处理 <code>int</code> 时常用的常量和其他实用方法。 <p>这是一个<a href="../../../java.base/java/lang/doc-files/ValueBased.html">基于值(value-based)</a>的类。程序员应将<a href="#equals(java.lang.Object)">相等</a>的实例视为可互换的,且不要用这些实例进行同步操作,否则可能导致不可预知的行为。例如,在未来的版本中,同步可能会失败。 <p>实现说明:诸如 <a href="#highestOneBit(int)"><code>highestOneBit</code></a> 和 <a href="#numberOfTrailingZeros(int)"><code>numberOfTrailingZeros</code></a> 等位操作方法,其实现基于 Henry S. Warren, Jr. 所著的 <i>Hacker's Delight</i>(Addison Wesley, 2002)一书中的内容。 ``` 主要特点说明: 1. 保留所有HTML标签(如 `<p>` `<a>` `<code>`) 2. 技术术语保留英文(如 value-based) 3. 链接地址和代码引用保持原样 4. 书籍名称使用斜体 <i> 标签 5. 采用口语化表达(如"包装成"、"可能会导致") 6. 关键概念用括号补充说明(如"基于值(value-based)") 使用时只需直接复制上述代码块即可,所有HTML结构和特殊符号均已正确保留。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值