首先理解这里的“值”是什么?这里的“值”就是指代码中用到的字面量,比如 int a = 5,这个 5 就是字面量,这里的“值”指的就是这个字面量 5
其次再来理解“标的类型”,这里的翻译虽然有点怪,但也讲得通,“标”一个意思就是LS说的“目标”类型(target),另一个意思就是代码中变量被“标注”的类型,比如 int a = 5,这里的 int 就是这个“标的类型”
所以整句话连起来就是,如果一个 字面量 的精度不超过变量本身 被标注的目标 类型,那么它就不会窄化。int n = 5.3,这里的 5.3 这个 字面量 被编译器识别为 double 类型,而变量 n 本身被 标注的目标 类型为 int,显然 double 的精度超过了 int 的精度,所以 5.3 就被窄化。反过来,double n = 5,5 这个字面量被编译器识别为 int 类型,而变量 n 本身被 标注的目标 类型为 double,显然 int 的精度不会超过 double 的精度,所以 5 没有被窄化。