[Ava]Final配列に整列


概要
私は
  • 冊の本を読んで、太っていることに気づいた.
  • n.問題
  • 以下のコードは正常に動作していますか?
  • import java.util.*;
    public class Main {
        public static void main(String[] args) throws Exception {
            final int[] numbers = {-3, -5, 1, 7, 4, -2};
            Arrays.sort(numbers); // final인데 정렬이??
        }
    }
    正解
  • まず蒸し犬を見たら、正常に運行できると言いました.
  • n/a原理
  • まず、参照タイプ変数と元のタイプ変数を理解します.
  • 私たちが基本的に知っているint、float、bool、long...類似の変数は元のタイプの変数です.
  • 参照タイプは、オブジェクト、アレイ、Integer/LongなどのWrapperクラスに相当します.
  • さらに、finalの参照タイプ変数は다른 주소를 가리킬 수 없을 뿐, 그 대상 인스턴스 객체의 값을 수정하지 못한다の意味ではありません.
  • したがってnumbers変数は異なる配列を指すことができず,配列内部の値しか修正できない.適用

  • では、内部の値さえ変更できない配列はありますか?
  • の配列では見つかりませんが、リストでは可能なようです.
  • Collections.unmodifiableListからsort不可リストを作成できます.
  • import java.util.*;
    public class Main {
    public static void main(String[] args) throws Exception {
        /*final int[] numbers = {-3, -5, 1, 7, 4, -2};
        Arrays.sort(numbers);*/
    
    	List<Integer> list = new ArrayList<>();
    	list.add(1);
    	list.add(-1);
    	list.add(3);
    	list.add(9);
    
    	list = Collections.unmodifiableList(list);
    	Collections.sort(list);
    
          }
      }

  • Integer/LongのようなWrapperクラスもリファレンスタイプなので、最終的に宣言できますか?
  • の正解から言えば、不可能です.
  • は、Boxing、Unboxingの概念を理解する必要がある.
  • 簡単に言えば、IntegerのようなWrapperクラスでは、値を直接使用することはできません.
  • Wrapperクラスに値を書き込むには、intなどの元のタイプ(Primitive Type)を使用してUnboxingを行う必要があります.
  • Unboxingを行った瞬間、この変数が指すRapperanceが変化するので不可能!
  • ソース
    天災防止軸開発者コメント