Javaベース(メモリ構造、文字列に関連...)
3840 ワード
3月24日内容整理
1.Javaは、JVMによってオペレーティングシステムからメモリ管理を割り当てられます.Runtime Data Area領域を指定します.
2.この中に5つのエリアがあります
-クラス(またはメソッド領域)領域
-スタック領域
-ヒップ領域
-ネイティブメソッド領域
-pcレジスタ領域
2層(またはメソッド領域)領域、スタック領域、臀部領域について
-クラス(またはメソッド領域)領域は、クラスファイルのバイトコードロード位置です.
-スタック領域は、デフォルト値と領域変数値、および参照変数のアドレス値を格納する場所であり、一時的に小さな領域を格納するために使用されます.
-hip領域は、配列文字列などの大きな単位領域を格納するために参照変数の真の値を格納します.
このとき、アドレス値が格納されているスタック領域と接続が切断されると、hipzone部分に格納されている参照変数値が不要なコレクタに食べられ、メモリが消去される.
-書き込みオブジェクトが「new」を作成すると、hip領域にオブジェクトが作成されます.
たとえば、「new Scanner」と書き込むと、スキャンオブジェクトがhip領域に作成されます.
上図コードは以下の通りです
String name 1=「洪吉童」;
String name 2=「洪吉童」;
変数名は異なりますが、文字列のアルファベットが同じ場合はアドレス値が共有されます.
String name 3=new String(「金記者」);
String name 4=new String(「金記者」);
同じテキストですが、newに遭遇するとhip領域に各オブジェクトが作成され、アドレス値に接続されます.
2.文字列関連の整理方法
1.Javaは、JVMによってオペレーティングシステムからメモリ管理を割り当てられます.Runtime Data Area領域を指定します.
2.この中に5つのエリアがあります
-クラス(またはメソッド領域)領域
-スタック領域
-ヒップ領域
-ネイティブメソッド領域
-pcレジスタ領域
2層(またはメソッド領域)領域、スタック領域、臀部領域について
-クラス(またはメソッド領域)領域は、クラスファイルのバイトコードロード位置です.
-スタック領域は、デフォルト値と領域変数値、および参照変数のアドレス値を格納する場所であり、一時的に小さな領域を格納するために使用されます.
-hip領域は、配列文字列などの大きな単位領域を格納するために参照変数の真の値を格納します.
このとき、アドレス値が格納されているスタック領域と接続が切断されると、hipzone部分に格納されている参照変数値が不要なコレクタに食べられ、メモリが消去される.
-書き込みオブジェクトが「new」を作成すると、hip領域にオブジェクトが作成されます.
たとえば、「new Scanner」と書き込むと、スキャンオブジェクトがhip領域に作成されます.
package study_0324;
public class study_0324 {
public static void main(String[] args) {
//참조타입은 자동적으로 null값으로 초기화 됨 아직 참조할 객체가 없다 라는 뜻, 배열또한 자동적으로 0으로 초기화 됨
// String 변수 = new String("문자열"); 원래 String은 객체를 생성하는 클래스메서드임
// String 변수 ="문자열"; 이와 같은 형식으로 단축형으로 많이 쓰임.
/* String name1="홍길동";
* String name2="홍길동";
* String name3=new String("홍길동");
*
* boolean result1=(name1==name2); ->true
* boolean result2=(name1==name3); ->false
*
* 참조형에서'=='참조하고 있는 주소가 같은가, 참조하는 객체가 같은가
* 기본형에서'=='값이 같은가
* name1.equals(name2) name1 객체안의 값과 name2객체안의 값이 같은지 값비교를 함
*
* 참조타입은 자동적으로 null값으로 초기화 됨 아직 참조할 객체가 없다 라는 뜻
* String name; //자동적으로 null값 들어감->아직 참조할 객체가 없음
* name = new String("홍길동") //->new를 만나면서 객체생성 주소생겨서 참조객체연결
*
*/
String name1="홍길동";
String name2="홍길동";
String name3=new String("홍길동");
boolean result1=(name1==name2);
boolean result2=(name1==name3);
System.out.println(result1);
System.out.println(result2);
if(name1==name2) {
System.out.println("참조하는 객체가 같습니다.");
}else {
System.out.println("참조하는 객체가 다릅니다.");
}
if(name2==name3) {
System.out.println("참조하는 객체가 같습니다.");
}else {
System.out.println("참조하는 객체가 다릅니다.");
}
if(name2.equals(name3)) {
System.out.println("참조하는 객체가 같습니다.");
}else {
System.out.println("참조하는 객체가 다릅니다.");
}
}
}
上図コードは以下の通りです
String name 1=「洪吉童」;
String name 2=「洪吉童」;
変数名は異なりますが、文字列のアルファベットが同じ場合はアドレス値が共有されます.
String name 3=new String(「金記者」);
String name 4=new String(「金記者」);
同じテキストですが、newに遭遇するとhip領域に各オブジェクトが作成され、アドレス値に接続されます.
2.文字列関連の整理方法
package study_0324;
public class study_0324_01 {
public static void main(String[] args) {
/* 배열.length , 문자열.length() ->문자의 길이를 나타내는 것
* 변수명.charAt(인덱스번호) 원하는 인덱스번호의 글자를 뽑아낼때 쓰임.
* 변수명.substring(시작인덱스,끝인덱스-1 까지표현) 시작 부터 끝까지 지정문자 출력
* 변수명.toLowerCase(원하는 인덱스 또는 공백) 소문자 바꾸기
* 변수명.toUpperCase(원하는 인덱스 또는 공백) 대문자 바꾸기
* 변수명.indexOf("찾는 문자")찾는 문자의 인덱스 반환
* 변수명.valueOf(7)->"7" int 7을 문자"7"로 바꿔줌
*/
String s1 = new String("Hi,");
String s2 = new String(" Java");
System.out.println("문자열 길이(s1):"+s1.length());
System.out.println(s1.charAt(1));
s1=s1.concat(s2);
System.out.println(s1.concat(s2)+"!");
System.out.println(s1.toLowerCase()+"!");
System.out.println(s1.substring(4,8)+"!");
String s3=" ";
System.out.println(s3.isEmpty());
System.out.println(s3.isBlank());
String s4="";
System.out.println(s4.isEmpty());
System.out.println(s4.isBlank());
String s5="*-*";
System.out.println(s5.repeat(10));
System.out.println(s2.trim().indexOf("v"));
}
}
Reference
この問題について(Javaベース(メモリ構造、文字列に関連...)), 我々は、より多くの情報をここで見つけました https://velog.io/@cbn1218/자바기초스택영역-과-힙영역-메소드-영역テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol