약간 혼란스러워하는 코드를 발견했습니다. 내가 분명히하고 싶은 2 가지 변종이 있습니다.Java에서 전달 된 최종 변수는 다른 쪽에서 최종적으로 유지됩니까?
예 1 :
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file.getAbsolutePath();
}
은 무엇 file
"final
"선언의 목적이 될 것인가? Java 프리미티브가 값에 의해 전달되고 getAbsolutePath()
이 단지 String
을 반환하기 때문에 변수가 다른 쪽 (호출 메소드)에 final
이되지 않을까요? 그리고 file
변수가이 두 줄의 범위 내에 만 있기 때문에 final
키워드의 목적을 실제로 볼 수 없습니다. 내가 빠진 것이 있습니까? 누구든지이 일을하는 이유를 보았습니까?
예 2
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file;
}
여기 때문에 실제 객체가 반환된다 .. 그는 file
변수가 일정하게 할 뜻/반대편 final
...? 그것은 말이되지 않는 것 같습니다.
일반적으로 변수 번호 을 액세스 유형없이 전달한 것처럼 보입니다. 마찬가지로, 나는 public
함수를 반환하는 함수에 private
변수를 가질 수 있습니다. 그러나 함수를 호출하여 변수를받는 변수는 액세스 한정자를 지정해야합니다. 따라서 public
을 지정하면 반환 된 변수는 해당 범위에 public
이됩니다. private
을 지정하면 반환되는 변수는 해당 범위에 private
이됩니다. final
과 (와) 차이가 있습니까? 변수의 "일정"이 전달 될 수있는 것입니까? 자바에 대해 내가 알고있는 것을 고려할 때 이것은 다소 희박한 일이다.
아니면 완전히 누락 되었습니까? final
키워드의 다른 목적이 위 코드에 있습니까?
편집 : 나는 코드를 쓴 원래의 개발자와 다시 확인하고, 그는 단지 그가 원래 방법은 많은 이상이 될 것이라고 생각했기 때문에 final
키워드를 넣어했다 및 확인하고 싶었
그 파일은 전체적으로 일정하게 유지되었다. 또한 그는 일반적으로 변하지 않아야 할 변수를 원칙적으로 final
으로 선언했으며 원칙적으로는 다음 두 가지 대답을 언급했다. 그래서 나는 표준적인 이유로 포함 된 단순한 추가 키워드로 너무 많이 읽은 것 같습니다. 모두에게 감사드립니다!
final을 사용하면 더 나은 성능을 제공 할 수 있습니다 (예 : http://en.wikipedia.org/wiki/Memoization). – Stuart
@ 스튜어트, 혼란스러워합니다. Memoization 최적화는 'final' 키워드와 관련이 없습니다 (Java에서 함께 사용할 수 있지만'final' 키워드는 Memoization 패턴의 고유 한 속도 이점을 제공하지 않습니다). – BrainSlugs83
OP의 질문에 답을 얻지 못했습니다. p - a --s - e - d - 최종 변수가 Java에서 반환 되었습니까? –