Technology sharing

Java trap

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Quid est 128 laqueus?

Inspice nummum codicis primum

		int a0=127;
        int a1=127;
        Integer a2=127;
        Integer a3=127;
        System.out.println(a0==a1);  // 1、运行结果是true
        System.out.println(a0==a2);  // 2、运行结果是true
        System.out.println(a2==a3);  // 3、运行结果是true
        System.out.println(a2.equals(a0)); // 注意这里必须是包装类的a2才能使用equals,a0不能使用
                                           // 4、运行结果是true
        System.out.println(a2.equals(a3)); // 5、运行结果是true
        System.out.println("-----------------------------");

        int b0=200;
        int b1=200;
        Integer b2=200;
        Integer b3=200;
        System.out.println(b0==b1);	// 6、运行结果是true
        System.out.println(b0==b2);	// 7、运行结果是true
        System.out.println(b2==b3);// 8、运行结果是false
        System.out.println(b2.equals(b0)); // 9、运行结果是true
        System.out.println(b2.equals(b3)); // 10、运行结果是true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • Estne cursus effectus quod expectavi?
    Revera, 8 cursus effectus est, qui dicitur 128 laqueo.

  • Iava 128 laqueus refert: cum valor per encapsulationis generis notitiae fundamentalis servatae maior est quam vel aequalis 128, oratio uniuscuiusque classis non est aequalis.128 esse non debet.

    Simpliciter ponere: quando minor vel 127 vel aequalis est, et maior quam vel par -128, valor ipso facto cohibendus est valor qui in eadem inscriptione existit automatice cohibenti non idem. Hoc est, dum distributio non est [-128,127], usura == falsis evenit. Si pares adhibeantur, verum erit. Quamvis valor in range currenti non sit, si Integer adhibeatur, sponte inpeditus erit, ideo problema laquei non erit 128, ergo septimus currendum verum est;

Cur laqueus apparet?

View source code
	/**解释精简一部分后
     * This method will always cache values in the range -128 to 127
     */
	public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

illustrare;
1. The value of IntegerCache.low is -128 and the value of IntegerCache.high is 127.
2. In valore in methodo integri, reponitur cella ordinata, quae aequiparatur cella, ab -128 ad 127 conditum intervallum.
3. Cum valor accipitur inter [-128, 127], valor redditus est valor definitus in ordine integroCache.cache, nec opus est novum obiectum creare.
4. Cum valorem in ambitu non sit, novum obiectum creandum eget. The new object == est oratio sententiae, quae falsa est;

Quae notanda sunt, cum adversus 128 laqueum

  • Si res nova creetur (ut infra), tunc 128 laqueus non erit. (Hoc involvit automatic vestimenta et packaging, ego hic postea introductio scribam)
    Ratio est, quia oratio rerum novarum diversa est memoria, nec eadem quae comparata sunt.
	Integer k1 = new Integer(100);
    Integer k2 = new Integer(100);
    System.out.println(k1==k2);  // 运行结果false
    System.out.println(k1.equals(k2)); // 运行结果true
  • 1
  • 2
  • 3
  • 4
  • Cum valores compares, methodo pares uti potes


Documenta relatio:
https://blog.csdn.net/niu_8865/article/details/110791911
https://blog.csdn.net/DianLanHong/article/details/119617352
https://blog.csdn.net/Yangyeon/article/details/135611919