본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

プログラミング自主学習 34日目 参照型(NullPointer Exception/String)

https://github.com/HyonHyonKOR/Thisisjava/tree/main/Chapter5

参照型

Javaのデータータイプには基本型(Primitive type)と参照型(reference type)がある。

基本型は以前勉強した、整数型、実数型、論理型がある。

参照型にはインターフェース型、配列型、クラス型がある。

 

基本型の変数はその値が入っている。

しかし、参照型の変数は値ではなく、オブジェクトのアドレスが入っている。

そのアドレスを参照し、値を代入したり、呼び出すため、参照型と言う。

 

参照:https://cs.mickeyengel.com/java/java_02_varsAndOutput.php

 

変数は基本的にスタックに存在し、基本型の場合は値もスタックに保存されているが、

参照型の場合、スタックにメモリアドレスがあり、そのアドレスを参照して、

ヒープにある参照型の値にアクセスする。その値が入っているところがオブジェクトだ。

 

 

参照:https://koreanfoodie.me/635

 

 

NullPointer Exception

nullはまだヒープメモリのアドレスを持っていないということを意味する値だ。

変数が参照できるオブジェクトのアドレスがないため、値を代入することもできない。

 

 

 

1)

String hobby = "여행";

hobby = null;

 

2)

String hobby = "여행";

hobby = "영화";

 

このように既存の参照するオブジェクトの住所(null)を失ったり、他のオブジェクト("영화")の住所を入れることで、

最初のStringオブジェクト"여행"は参照がなくなった。

これにより、該当オブジェクトは自動的に消滅され、このようなjavaの機能をGarbage Collectorという。

 

String

文字列リテラルの処理

https://starkying.tistory.com/entry/what-is-java-string-pool

 

String Constant Pool이란? | Java String Pool

Java에서 String 객체를 생성하는 방법은 2가지가 있다. 첫번째는 String literal, 즉 큰 따옴표("")를 사용하는 것이고, 두번째는 new 연산자를 사용하는 것이다. 두 방법에는 어떤 차이가 있을까? 간단한

starkying.tistory.com

 

基本的に同じStringリテラルはHeap領域のString constant Poolに生成される。

 

<同じString pool>

String a = "yes"

String b = "yes"

 

しかし、new演算子を通してインスタンスを作成する場合、異なるString poolに保存されるため、

メモリアドレスも異なるようになり、メモリ効率にはよくない。

 

METHOD

indexOf(); 特定な文字列が何番インデックスから始めるかをリータンする。

例) String str ="Hello world"

      int result = str.indexOf("Hello");

      System.out.println(result);

 

      0

 

例) String str ="Hello world"

      int result = str.indexOf("hello");

      System.out.println(result);

 

      -1

 

indexOfメッソドに指定したメッソドがない場合は、-1をリータンする。

 

 

contains();  特定な文字列を含めているかどうかをチェックし、trueかfalseにreturnする。

例) String str ="Hello world"

      boolean result = str.contains("hello");

      System.out.println(result);

 

      false

 

split(); delimeterがあるところを分離する。主に配列を使用する。

例)String str="I.LOVE.YOU"

       String[] arr=str.split(".");

 

       arr[0]  arr[1]  arr[2]

          I       LOVE  YOU