<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>语言 on 撷时录</title><link>https://jiangbyte.github.io/categories/%E8%AF%AD%E8%A8%80/</link><description>Recent content in 语言 on 撷时录</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 01 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://jiangbyte.github.io/categories/%E8%AF%AD%E8%A8%80/index.xml" rel="self" type="application/rss+xml"/><item><title>Integer 缓存机制（JDK 17 源码）</title><link>https://jiangbyte.github.io/p/integer-%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6jdk-17-%E6%BA%90%E7%A0%81.html</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0800</pubDate><guid>https://jiangbyte.github.io/p/integer-%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6jdk-17-%E6%BA%90%E7%A0%81.html</guid><description>&lt;p&gt;&lt;code&gt;Integer&lt;/code&gt; 的缓存不是业务层优化，而是 &lt;strong&gt;JLS 对自动装箱对象同一性&lt;/strong&gt; 的硬要求：一定范围内的 &lt;code&gt;int&lt;/code&gt; 装箱后必须是&lt;strong&gt;同一个&lt;/strong&gt; &lt;code&gt;Integer&lt;/code&gt; 实例。实现落在私有静态内部类 &lt;code&gt;Integer.IntegerCache&lt;/code&gt;，对外入口是 &lt;code&gt;Integer.valueOf(int)&lt;/code&gt;。下文依据 JDK 17 的 &lt;code&gt;java.lang.Integer&lt;/code&gt; 源码展开。&lt;/p&gt;&#10;&lt;h2 id="类上的-valuebased"&gt;类上的 ValueBased&lt;/h2&gt;&#10;&lt;p&gt;JDK 17 的 &lt;code&gt;Integer&lt;/code&gt; 声明为：&lt;/p&gt;&#10;&lt;figure&#10; class="code-block code-block--chroma code-block--line-numbers"&#10; data-code-block&#10; data-language="java"&#10;&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;java&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@jdk.internal.ValueBased&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Number&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Comparable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Constable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConstantDesc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;pre class="code-block__fallback" hidden aria-hidden="true"&gt;&lt;code class="language-java"&gt;@jdk.internal.ValueBased&#10;public final class Integer extends Number&#10; implements Comparable&amp;lt;Integer&amp;gt;, Constable, ConstantDesc {&lt;/code&gt;&lt;/pre&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;code&gt;@ValueBased&lt;/code&gt; 提醒：这类对象更宜按&lt;strong&gt;值&lt;/strong&gt;使用。缓存让小整数在引用层面也「碰巧」同一，但业务比较仍应以 &lt;code&gt;equals&lt;/code&gt; / 拆箱后的 &lt;code&gt;int&lt;/code&gt; 为准，不要把 &lt;code&gt;==&lt;/code&gt; 当成通用相等判断。&lt;/p&gt;&#10;&lt;h2 id="自动装箱实际调用-valueof"&gt;自动装箱实际调用 valueOf&lt;/h2&gt;&#10;&lt;p&gt;编译器对 &lt;code&gt;Integer a = 10;&lt;/code&gt; 这类赋值会插入 &lt;code&gt;Integer.valueOf(10)&lt;/code&gt;，不会走已废弃的构造器。完整验证如下（覆盖缓存边界、&lt;code&gt;new&lt;/code&gt;、&lt;code&gt;equals&lt;/code&gt;、抬高上界）：&lt;/p&gt;</description></item><item><title>Object 源码解析（Oracle JDK 17）</title><link>https://jiangbyte.github.io/p/object-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90oracle-jdk-17.html</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0800</pubDate><guid>https://jiangbyte.github.io/p/object-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90oracle-jdk-17.html</guid><description>&lt;p&gt;&lt;code&gt;java.lang.Object&lt;/code&gt; 是 Java 类型体系的根：除它自身外，每个类（含数组类型）最终都继承它，因而它定义的方法构成「所有对象共有的最小行为集」&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;。下文依据本机 &lt;strong&gt;Oracle JDK 17.0.20.1&lt;/strong&gt;（&lt;code&gt;$JAVA_HOME&lt;/code&gt;=&lt;code&gt;/home/charlie/workspace/sdks/jdk-17&lt;/code&gt;）自带源码包中的 &lt;code&gt;Object.java&lt;/code&gt;，按成员出现顺序解析——侧重&lt;strong&gt;为何存在、契约与 HotSpot 如何支撑、工程上如何用&lt;/strong&gt;；源码与本机实测用来锚定结论，而不是逐行注释。&lt;/p&gt;&#10;&lt;p&gt;源码路径：&lt;code&gt;$JAVA_HOME/lib/src.zip&lt;/code&gt; → &lt;code&gt;java.base/java/lang/Object.java&lt;/code&gt;&lt;sup id="fnref1:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#10;&lt;p&gt;运行与验证：同一套 Oracle JDK；工程 &lt;code&gt;learning-lab/java/java17-sources&lt;/code&gt; 中的 &lt;code&gt;ObjectLayoutVerify&lt;/code&gt; / &lt;code&gt;ObjectMethodsVerify&lt;/code&gt; / &lt;code&gt;ObjectMonitorVerify&lt;/code&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#10;&lt;h2 id="类注释根类型意味着什么"&gt;类注释：根类型意味着什么&lt;/h2&gt;&#10;&lt;figure&#10; class="code-block code-block--chroma code-block--line-numbers"&#10; data-code-block&#10; data-language="java"&#10;&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;java&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Class {@code Object} is the root of the class hierarchy.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Every class has {@code Object} as a superclass. All objects,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * including arrays, implement the methods of this class.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @see java.lang.Class&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @since 1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;pre class="code-block__fallback" hidden aria-hidden="true"&gt;&lt;code class="language-java"&gt;/**&#10; * Class {@code Object} is the root of the class hierarchy.&#10; * Every class has {@code Object} as a superclass. All objects,&#10; * including arrays, implement the methods of this class.&#10; *&#10; * @see java.lang.Class&#10; * @since 1.0&#10; */&#10;public class Object {&lt;/code&gt;&lt;/pre&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;把「万物皆对象」落成语言规则，有三层后果：&lt;/p&gt;</description></item></channel></rss>