为什么java源码看起来有点语法错误
PHP中文网
PHP中文网 2017-04-18 10:24:55
0
1
285
    /**
     * Implements Map.put and related methods
     *
     * @param hash hash for key
     * @param key the key
     * @param value the value to put
     * @param onlyIfAbsent if true, don't change existing value
     * @param evict if false, the table is in creation mode.
     * @return previous value, or null if none
     */
    final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                   boolean evict) {
        Node<K,V>[] tab; Node<K,V> p; int n, i;
        if ((tab = table) == null || (n = tab.length) == 0)
            n = (tab = resize()).length;
        if ((p = tab[i = (n - 1) & hash]) == null)
            tab[i] = newNode(hash, key, value, null);

上面是hashMap的一段源码,int n,i; n是没有初始化但是怎么可以n-1呢?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(1)
伊谢尔伦

으아악

첫 번째 if 판단에서
1. 이전 항목((tab=table)==null)이 true이면 if에서 문을 직접 실행하고 n에 값을 할당합니다
2. 이전 항목 중 하나가 false인 경우 먼저 n에 ​​값을 할당하고(n=tab.length) 0과 같은지 확인합니다(n==0과 동일)
--2.1 n==인 경우 0이 true인 경우 다음 문을 실행합니다. if
--2.2 n==0이 false인 경우 n은 변경되지 않으며 값은 tab.length

입니다.

실제로는 다음 문자열과 동일합니다

으아악

이건 이해해 주셔야 할 것 같습니다. .
탭 배열이 null이거나 길이가 0인 경우 탭을 resize() 메서드의 반환 값과 동일하게 하고 n을 탭의 길이와 동일하게 하는 논리입니다.
탭이 null이 아닌 경우 또는 길이가 0보다 크면 n은 탭의 길이와 같습니다

조건의 할당 연산도 할당 연산입니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!