プログラミング自主学習 34日目 参照型(NullPointer Exception/String)
参照型
Javaのデータータイプには基本型(Primitive type)と参照型(reference type)がある。
基本型は以前勉強した、整数型、実数型、論理型がある。
参照型にはインターフェース型、配列型、クラス型がある。
基本型の変数はその値が入っている。
しかし、参照型の変数は値ではなく、オブジェクトのアドレスが入っている。
そのアドレスを参照し、値を代入したり、呼び出すため、参照型と言う。
参照:https://cs.mickeyengel.com/java/java_02_varsAndOutput.php
変数は基本的にスタックに存在し、基本型の場合は値もスタックに保存されているが、
参照型の場合、スタックにメモリアドレスがあり、そのアドレスを参照して、
ヒープにある参照型の値にアクセスする。その値が入っているところがオブジェクトだ。
参照:https://koreanfoodie.me/635
NullPointer Exception
nullはまだヒープメモリのアドレスを持っていないということを意味する値だ。
変数が参照できるオブジェクトのアドレスがないため、値を代入することもできない。
String hobby = "여행";
hobby = null;
String hobby = "여행";
hobby = "영화";
このように既存の参照するオブジェクトの住所(null)を失ったり、他のオブジェクト("영화")の住所を入れることで、最初のStringオブジェクト"여행"は参照がなくなった。
これにより、該当オブジェクトは自動的に消滅され、このようなjavaの機能をGarbage Collectorという。
String
String Constant Pool
基本的に同じ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
``
```java
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
Discussion