<?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>http://localhost:1313/tags/%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="http://localhost:1313/tags/%E8%AF%AD%E8%A8%80/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Integer 缓存机制（JDK 17 源码）</title>
				<link>http://localhost:1313/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>http://localhost:1313/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;&#xA;&lt;h2 id=&#34;类上的-valuebased&#34;&gt;类上的 ValueBased&lt;/h2&gt;&#xA;&lt;p&gt;JDK 17 的 &lt;code&gt;Integer&lt;/code&gt; 声明为：&lt;/p&gt;&#xA;&lt;figure&#xA;  class=&#34;code-block code-block--chroma code-block--line-numbers&#34;&#xA;  data-code-block&#xA;  data-language=&#34;java&#34;&#xA;&gt;&#xA;  &lt;figcaption class=&#34;code-block__toolbar&#34;&gt;&#xA;    &lt;span class=&#34;code-block__language&#34;&gt;java&lt;/span&gt;&#xA;      &lt;button class=&#34;code-block__copy&#34; type=&#34;button&#34; data-code-copy&gt;复制&lt;/button&gt;&#xA;  &lt;/figcaption&gt;&#xA;  &lt;div class=&#34;code-block__viewport&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@jdk.internal.ValueBased&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Number&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Comparable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Constable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ConstantDesc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre class=&#34;code-block__fallback&#34; hidden aria-hidden=&#34;true&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;@jdk.internal.ValueBased&#xA;public final class Integer extends Number&#xA;        implements Comparable&amp;lt;Integer&amp;gt;, Constable, ConstantDesc {&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;button class=&#34;code-block__expand&#34; type=&#34;button&#34; data-code-expand hidden&gt;展开全部&lt;/button&gt;&#xA;&lt;/figure&gt;&#xA;&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;&#xA;&lt;h2 id=&#34;自动装箱实际调用-valueof&#34;&gt;自动装箱实际调用 valueOf&lt;/h2&gt;&#xA;&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>http://localhost:1313/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>http://localhost:1313/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=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&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;&#xA;&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=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#xA;&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=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;类注释根类型意味着什么&#34;&gt;类注释：根类型意味着什么&lt;/h2&gt;&#xA;&lt;figure&#xA;  class=&#34;code-block code-block--chroma code-block--line-numbers&#34;&#xA;  data-code-block&#xA;  data-language=&#34;java&#34;&#xA;&gt;&#xA;  &lt;figcaption class=&#34;code-block__toolbar&#34;&gt;&#xA;    &lt;span class=&#34;code-block__language&#34;&gt;java&lt;/span&gt;&#xA;      &lt;button class=&#34;code-block__copy&#34; type=&#34;button&#34; data-code-copy&gt;复制&lt;/button&gt;&#xA;  &lt;/figcaption&gt;&#xA;  &lt;div class=&#34;code-block__viewport&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Class {@code Object} is the root of the class hierarchy.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Every class has {@code Object} as a superclass. All objects,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * including arrays, implement the methods of this class.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @see     java.lang.Class&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @since   1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;pre class=&#34;code-block__fallback&#34; hidden aria-hidden=&#34;true&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;/**&#xA; * Class {@code Object} is the root of the class hierarchy.&#xA; * Every class has {@code Object} as a superclass. All objects,&#xA; * including arrays, implement the methods of this class.&#xA; *&#xA; * @see     java.lang.Class&#xA; * @since   1.0&#xA; */&#xA;public class Object {&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;button class=&#34;code-block__expand&#34; type=&#34;button&#34; data-code-expand hidden&gt;展开全部&lt;/button&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;把「万物皆对象」落成语言规则，有三层后果：&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
