[Java] 참고값 전달이 안 좋아요!
Java의 참조 값 전달을 추적해야 합니다.
자바에 인용 전달이 존재하지 않는다고 자주 들었습니다.
처음에는 "에"라고 생각했지만 조사 결과를 총괄했다.
일반 방법의 매개 변수 전달 방법
납품 가격
납품 참조
참조 값 전달
Java에서 메소드 매개변수 전달 방법
납품 가격
참조 값 전달
※ 납품 참조는 Java에 없습니다.
다음은 값 전달, 참조 값 전달입니다.
값 전달 예
RefValHandOver.javaprivate static void editNumber(int arg){
arg = 0;
System.out.println("editNumber : " + arg);
}
public static void main(String[] args) {
int number = 100;
editNumber(number);
System.out.println( "main : " + number);
}
결과
editNumber : 0
main : 100
editNumber에서는 0이지만 main에서는 100을 유지합니다.
매개변수를 기본으로 설정하면 값이 전달됩니다.
기본형
유형
bit
초기 값
boolean
1bit
false
byte
8bit
0
char
16bit
\u0000
short
16bit
0
int
32bit
0
float
32bit
0.0
long
64bit
0
double
64bit
0.0
여기까지는 아무 문제 없죠?
참조 값 전달 예
3가지 모드로 나누어 설명합니다.
・1.메서드에서 데이터를 조작할 때
・2.방법 내에서 new.
・3.방법에null을 대입합니다.
RefValHandOver.java// 1. メソッド内でデータ操作した場合
private static void methodAddArray(ArrayList<String> arg){
arg.add("B");
System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2. メソッド内でnewしなおす。
private static void methodNewArray(ArrayList<String> arg){
arg = new ArrayList<String>();
arg.add("C");
System.out.println("methodNewArray : " +arg.hashCode() + " : " + arg.toString());
}
//3. メソッド内でnullを代入する。
private static void methodNullArray(ArrayList<String> arg){
arg = null;
System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " + arg.toString() : "null");
}
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
// 1. メソッド内でデータ操作した場合
methodAddArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//2. メソッド内でnewしなおす。
methodNewArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//3. メソッド内でnullを代入する。
methodNullArray(arrayList);
System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " + arrayList.toString() : "null");
}
결과
// 1. メソッド内でデータ操作した場合
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B] //参照先が変わっていない
//2. メソッド内でnewしなおす。
methodNewArray : 98 : [C]
main : 3042 : [A, B] //参照先が変わっている
//3. メソッド内でnullを代入する。
methodNullArray : null
main : 3042 : [A, B] //参照先が変わっている
도해를 시도하다
설명을 해볼게요.
초점은 새 인용을 매개 변수에 대입하는가 하는 것이다.
만약 대입된다면'main 내의 국부 변수'와'방법 내의 매개 변수'는 서로 다른 것이 될 것이다.
※ 자바에 존재하지 않는 참조 전달에서 2, 3의 예는main의 국부 변수에 반영됩니다.
총결산
값 전달, 참조 값 전달에 대해 설명했습니다.
개인적으로 참고값 전달을 참고 주소로 하면 이해하기 쉬울 것 같아요.
Reference
이 문제에 관하여([Java] 참고값 전달이 안 좋아요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/j-work/items/f44afc810f5f7974ee0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
납품 가격
납품 참조
참조 값 전달
Java에서 메소드 매개변수 전달 방법
납품 가격
참조 값 전달
※ 납품 참조는 Java에 없습니다.
다음은 값 전달, 참조 값 전달입니다.
값 전달 예
RefValHandOver.javaprivate static void editNumber(int arg){
arg = 0;
System.out.println("editNumber : " + arg);
}
public static void main(String[] args) {
int number = 100;
editNumber(number);
System.out.println( "main : " + number);
}
결과
editNumber : 0
main : 100
editNumber에서는 0이지만 main에서는 100을 유지합니다.
매개변수를 기본으로 설정하면 값이 전달됩니다.
기본형
유형
bit
초기 값
boolean
1bit
false
byte
8bit
0
char
16bit
\u0000
short
16bit
0
int
32bit
0
float
32bit
0.0
long
64bit
0
double
64bit
0.0
여기까지는 아무 문제 없죠?
참조 값 전달 예
3가지 모드로 나누어 설명합니다.
・1.메서드에서 데이터를 조작할 때
・2.방법 내에서 new.
・3.방법에null을 대입합니다.
RefValHandOver.java// 1. メソッド内でデータ操作した場合
private static void methodAddArray(ArrayList<String> arg){
arg.add("B");
System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2. メソッド内でnewしなおす。
private static void methodNewArray(ArrayList<String> arg){
arg = new ArrayList<String>();
arg.add("C");
System.out.println("methodNewArray : " +arg.hashCode() + " : " + arg.toString());
}
//3. メソッド内でnullを代入する。
private static void methodNullArray(ArrayList<String> arg){
arg = null;
System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " + arg.toString() : "null");
}
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
// 1. メソッド内でデータ操作した場合
methodAddArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//2. メソッド内でnewしなおす。
methodNewArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//3. メソッド内でnullを代入する。
methodNullArray(arrayList);
System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " + arrayList.toString() : "null");
}
결과
// 1. メソッド内でデータ操作した場合
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B] //参照先が変わっていない
//2. メソッド内でnewしなおす。
methodNewArray : 98 : [C]
main : 3042 : [A, B] //参照先が変わっている
//3. メソッド内でnullを代入する。
methodNullArray : null
main : 3042 : [A, B] //参照先が変わっている
도해를 시도하다
설명을 해볼게요.
초점은 새 인용을 매개 변수에 대입하는가 하는 것이다.
만약 대입된다면'main 내의 국부 변수'와'방법 내의 매개 변수'는 서로 다른 것이 될 것이다.
※ 자바에 존재하지 않는 참조 전달에서 2, 3의 예는main의 국부 변수에 반영됩니다.
총결산
값 전달, 참조 값 전달에 대해 설명했습니다.
개인적으로 참고값 전달을 참고 주소로 하면 이해하기 쉬울 것 같아요.
Reference
이 문제에 관하여([Java] 참고값 전달이 안 좋아요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/j-work/items/f44afc810f5f7974ee0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
RefValHandOver.java
private static void editNumber(int arg){
arg = 0;
System.out.println("editNumber : " + arg);
}
public static void main(String[] args) {
int number = 100;
editNumber(number);
System.out.println( "main : " + number);
}
결과
editNumber : 0
main : 100
editNumber에서는 0이지만 main에서는 100을 유지합니다.매개변수를 기본으로 설정하면 값이 전달됩니다.
기본형
유형
bit
초기 값
boolean
1bit
false
byte
8bit
0
char
16bit
\u0000
short
16bit
0
int
32bit
0
float
32bit
0.0
long
64bit
0
double
64bit
0.0
여기까지는 아무 문제 없죠?
참조 값 전달 예
3가지 모드로 나누어 설명합니다.
・1.메서드에서 데이터를 조작할 때
・2.방법 내에서 new.
・3.방법에null을 대입합니다.
RefValHandOver.java// 1. メソッド内でデータ操作した場合
private static void methodAddArray(ArrayList<String> arg){
arg.add("B");
System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2. メソッド内でnewしなおす。
private static void methodNewArray(ArrayList<String> arg){
arg = new ArrayList<String>();
arg.add("C");
System.out.println("methodNewArray : " +arg.hashCode() + " : " + arg.toString());
}
//3. メソッド内でnullを代入する。
private static void methodNullArray(ArrayList<String> arg){
arg = null;
System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " + arg.toString() : "null");
}
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
// 1. メソッド内でデータ操作した場合
methodAddArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//2. メソッド内でnewしなおす。
methodNewArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//3. メソッド内でnullを代入する。
methodNullArray(arrayList);
System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " + arrayList.toString() : "null");
}
결과
// 1. メソッド内でデータ操作した場合
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B] //参照先が変わっていない
//2. メソッド内でnewしなおす。
methodNewArray : 98 : [C]
main : 3042 : [A, B] //参照先が変わっている
//3. メソッド内でnullを代入する。
methodNullArray : null
main : 3042 : [A, B] //参照先が変わっている
도해를 시도하다
설명을 해볼게요.
초점은 새 인용을 매개 변수에 대입하는가 하는 것이다.
만약 대입된다면'main 내의 국부 변수'와'방법 내의 매개 변수'는 서로 다른 것이 될 것이다.
※ 자바에 존재하지 않는 참조 전달에서 2, 3의 예는main의 국부 변수에 반영됩니다.
총결산
값 전달, 참조 값 전달에 대해 설명했습니다.
개인적으로 참고값 전달을 참고 주소로 하면 이해하기 쉬울 것 같아요.
Reference
이 문제에 관하여([Java] 참고값 전달이 안 좋아요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/j-work/items/f44afc810f5f7974ee0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 1. メソッド内でデータ操作した場合
private static void methodAddArray(ArrayList<String> arg){
arg.add("B");
System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2. メソッド内でnewしなおす。
private static void methodNewArray(ArrayList<String> arg){
arg = new ArrayList<String>();
arg.add("C");
System.out.println("methodNewArray : " +arg.hashCode() + " : " + arg.toString());
}
//3. メソッド内でnullを代入する。
private static void methodNullArray(ArrayList<String> arg){
arg = null;
System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " + arg.toString() : "null");
}
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
// 1. メソッド内でデータ操作した場合
methodAddArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//2. メソッド内でnewしなおす。
methodNewArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//3. メソッド内でnullを代入する。
methodNullArray(arrayList);
System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " + arrayList.toString() : "null");
}
// 1. メソッド内でデータ操作した場合
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B] //参照先が変わっていない
//2. メソッド内でnewしなおす。
methodNewArray : 98 : [C]
main : 3042 : [A, B] //参照先が変わっている
//3. メソッド内でnullを代入する。
methodNullArray : null
main : 3042 : [A, B] //参照先が変わっている
값 전달, 참조 값 전달에 대해 설명했습니다.
개인적으로 참고값 전달을 참고 주소로 하면 이해하기 쉬울 것 같아요.
Reference
이 문제에 관하여([Java] 참고값 전달이 안 좋아요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/j-work/items/f44afc810f5f7974ee0a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)