2017-04-12 1 views
4

개체가 암시 적으로 어떻게 생성되는지 이해할 수 없습니다.java가 객체를 암시 적으로 만드는 방법은 무엇입니까? String 클래스의 경우와 마찬가지로

예 :

String s = "implicit instantiation"; 

내가 그 개체를 암시 적으로 생성 할 수 있습니다 내 자신의 클래스를 만들 수 있습니까?

+2

요약하면 할 수 없습니다. –

+2

'문자열 '은 문자열 리터럴, 연결 연산자,'스위치 '경우에 사용할 수있는 능력 등 주변에 구문론적인 설탕이있는 특수한 객체입니다. 문자열에만 해당 기능이 있습니다 (배열에는 "리터럴"도 있음). – RealSkeptic

답변

3

아니요. 문자열 인스턴스화는 컴파일러에서 암시 적으로 처리됩니다. String 및 Array 클래스에만이 속성이 있습니다.

String greeting = "Hello world!"; 
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' }; 

Autoboxing

는 암시 적으로 원시 래퍼 타입의 객체를 생성 할 수 있지만, 그 또한 컴파일러에 의해 처리하는 특별한 경우입니다. 이 능력으로 자신 만의 클래스를 만들 수는 없습니다.

Boolean b = false; 
Integer i = 0; 
Double pi = 3.1416; 
+2

우리는'Integer i = 5'도 할 수 없습니까? –

+0

@Shashwat 오, 그래, 내가 추가하자. –

1

불행히도 그럴 수 없습니다!

String s = "implicit instantiation" 
: 당신은 자바 언어의 모든 연산자를 오버로드 할 수 없기 때문에 문자열 클래스의 경우

Foo myFoo = 1 

같은 일을 할 수있는 방법이 없기 ++ C 또는 C에

반대

은 개발자를위한 설탕입니다. 장면 뒤에는 컴파일러가 "더러운"작업을 수행하고 (문자열 풀이 있다는 것을 기억하십시오)

String s = new String("implicit instantiation") 

같은 당신은 생성자와 생성자 자사의 구조를위한 특별한 방법이 필요하고 방법을 초기화 객체의 모든 예를 들어 ... 다른 배열과 같은 유형, 또는 숫자에 대한 래퍼

0

을 적용합니다. 예 :

String s; // Is not initialized and it's nos constructed. 

그럼 Java에서 새 개체를 어떻게 구성합니까? new operator으로 쉽게 새 개체를 만들 수 있습니다!

s = new String("qwe"); // New object constructed 

하지만 여기에는 많은 초보자들이 혼란에 빠지기 마련입니다. 왜 내가이 작업을 수행 할 수 있습니다 String 자바의 특별한 경우이고 당신이 클래스에있는 모든 원시 변수와 같은 new operator을 추가 할 필요가 없습니다

String s= "asdfasd;" 

때문입니다. 예 :

Integer i = 3; 
Double d = 3.3d; 

등등.

관련 문제