정적 / 동적 vs 강 / 약


319

나는이 용어들이 프로그래밍의 모든 곳에서 얽혀있는 것을 보았고 그것이 의미하는 바에 대한 모호한 개념을 가지고있다. 검색 결과 실제로 그러한 모든 것들이 스택 오버플로 오버플로로 요청되었음을 보여줍니다. 내가 아는 한 언어의 정적 / 동적 입력은 강력 / 약한 입력과 미묘하게 다르지만 그 차이점은 무엇입니까? 다른 출처는 다른 의미를 사용하거나 용어를 서로 바꿔서 사용하는 것처럼 보입니다. 둘 다에 대해 이야기하고 실제로 차이를 설명하는 곳을 찾을 수 없습니다. 좋은 점은 누군가 나와 나와 다른 세계를 위해 이것을 명확하게 철자 할 수 있다면 좋습니다.



답변:


423
  • 정적 / 동적 입력 은 유형 정보가 수집 될 때 (컴파일 타임 또는 런타임시)에 관한 것입니다.

  • 강하고 약한 타이핑 은 타입이 얼마나 엄격하게 구별되는지에 관한 것입니다 (예 : 언어가 문자열에서 숫자로 암시 적 변환을 시도하는지 여부).

자세한 정보는 위키 페이지 를 참조하십시오.


7
Wikipedia는 모든 답을 가지고 있습니다. 내가 이미 모르는 사이를 우연히 만난 이유는 무엇입니까?
Dan Revell

31
정적 / 동적이 강하거나 약한 것이 아니라는 것을 많은 사람들이 인식하지 못하는 것은 부끄러운 일입니다.
Dykam

10
"유형 약점"의 정도는 다릅니다. 강력한 형식의 언어는 문자열에서 숫자로의 변환을 시도 할 수 있습니다. 반면에, HyperTalk 나 (I가 수십 년 전에 사용 언어는) 너무 약하게 즉 입력 된 "12" + "34"동일 것이다 "46", 그러나 "12" + "34Q"동일 것 "1234Q"[다행히 사람이 쓸 수있는 "12" & "34"하나의 연결을 원하는 경우]. 흥미롭게도 숫자를 보유한 변수는 배정 밀도 부동 소수점으로 저장되었으며 이러한 변수에 대한 수학은 문자열 뭉치없이 부동 소수점 값을 사용했지만 변수가 문자열인지 숫자인지를 확인할 방법이 없었습니다.
supercat

9
@kittylyst이 답변이 strong이 정적과 동의어임을 나타내는 곳을 알 수 없습니다
Pete

4
++ (거의) 단일 라인 정의.
JamesFaix

211

아마추어가 프로그래밍 언어에 대해 이야기하는 데 사용하는 용어에서 소프트 스팟을 발견했습니다. "strong"및 "weak"typing이라는 용어 는 보편적으로 동의 된 기술적 의미가 없으므로 사용하지 마십시오 . 반대로 정적 유형 지정 은 프로그램이 실행되기 전에 확인되고 프로그램이 시작되기 전에 거부 될 수 있음을 의미합니다. 동적 유형 지정실행 중에 유형 이 검사 됨을 의미하며, 유형이 잘못된 조작으로 인해 프로그램이 중지되거나 런타임시 오류를 표시 할 수 있습니다 . 정적 타이핑의 주요 이유는 "동적 유형 오류"가있는 프로그램을 배제하기위한 것입니다.

타이핑은 일반적으로 타입 시스템에 허점없음을 의미하는 반면, 타이핑이 약하다 는 것은 타입 시스템이 파괴 될 수 있음을 의미합니다 (보증이 무효화 됨). 정적 및 동적 입력을 의미하기 위해이 용어는 종종 잘못 사용됩니다. 차이점을 보려면 C를 생각해보십시오. 언어는 컴파일 타임에 유형 검사 (정적 입력)이지만 허점이 많이 있습니다. 거의 모든 유형의 값을 동일한 크기의 다른 유형으로 캐스트 할 수 있습니다. 특히 포인터 유형을 자유롭게 캐스트 할 수 있습니다. 파스칼은 강력하게 형식화되었지만 의도하지 않은 허점을 가지고있는 언어였습니다. 태그가없는 변형 레코드입니다.

강력한 형식의 언어 구현은 종종 시간이 지남에 따라 허점을 얻으므로 대개 런타임 시스템의 일부를 고급 언어로 구현할 수 있습니다. 예를 들어 Objective Caml에는 Obj.magic단순히 인수를 반환하는 런타임 효과 가있는 함수 가 있지만 컴파일 타임에는 모든 유형의 값을 다른 유형 중 하나로 변환합니다. 내가 가장 좋아하는 예는 Modula-3인데, 그의 디자이너는 타입 캐스팅 구문이라고 불렀다 LOOPHOLE.

이미 말했듯이, "strong"과 "weak"라는 단어를 정확히 같은 방식으로 사용하는 두 사람은 믿을 수 없습니다. 따라서 피하십시오.


31
(+1) "강한"및 "약한"이라는 용어를 사용하지 말 것을 제안합니다.
니코

1
동의했고, Jon Skeet의 책을 읽고 있었는데, 이것과 동일한 반응입니다.
베넷 Yeates

내가 아는 한 Java에는 이러한 허점이 있지만 여전히 강력한 유형의 언어로 간주되므로 "strong"과 "weak"라는 용어를 피하는 것이 좋습니다.
doubleOrt

74

간단하게 이런 식으로 넣어 : A의 정적으로 입력 된 언어 유형은 정적 당신이 유형에 대한 변수를 설정하면 의미, 당신은 변경할 수 없습니다. 이는 타이핑이 참조하는 값이 아니라 변수와 연관되어 있기 때문입니다.

예를 들어 Java의 경우 :

String str = "Hello";  //statically typed as string
str = 5;               //would throw an error since java is statically typed

동적 유형 언어 에서는 유형이 dynamic 인 반면 변수를 유형으로 설정 한 후에는 유형을 변경할 수 있습니다. 타이핑은 변수가 아닌 값과 연관되어 있기 때문입니다.

예를 들어 파이썬에서 :

str = "Hello" # it is a string
str = 5       # now it is an integer; perfectly OK

반면에 언어 의 강하고 약한 타이핑 은 암시 적 유형 변환과 관련이 있습니다 (부분적으로 @Dario의 답변에서 가져옴).

예를 들어 파이썬에서 :

str = 5 + "hello" 
# would throw an error since it does not want to cast one type to the other implicitly. 

반면 PHP에서는 :

$str = 5 + "hello"; // equals 5 because "hello" is implicitly casted to 0 
// PHP is weakly typed, thus is a very forgiving language.

정적 타이핑을 사용하면 컴파일시 유형 정확성을 확인할 수 있습니다. 정적 형식 언어는 일반적으로 컴파일되며 동적 형식 언어는 해석됩니다. 따라서 동적으로 입력 된 언어는 런타임에 입력을 확인할 수 있습니다.


2
구체적인 예를 사용하는 것에 대한 좋은 대답과 명성.
Julian A.

3
그렇기 때문에 PHP를주의해서 사용해야합니다.
알리 Gajani

1
언어 예제가 정말 도움이됩니다. 매우 감사.
J Mullen

이런 의미에서 문자열이 아닌 문자열을 문자열로 연결할 수 있고 자동 unboxing / boxing 때문에 Java가 너무 약한 유형입니까?
Stephen Paul

1
@StephenPaul 당신은 내 대답이 그런 식으로 이해 될 수 있다고 옳습니다. 그렇지 않습니다. 단순성을 위해 연결을 사용했지만 실제로 강점 / 약점은 변수 자체의 암시 적 유형 변환에 관한 것입니다.
mehmet

20

타이핑이 약하다는 것은 상황에 따라 객체 유형이 변경 될 수 있음을 의미합니다. 예를 들어 약한 유형의 언어에서 다른 숫자를 추가하면 문자열 "123"이 숫자 123으로 처리 될 수 있습니다. 타이핑이 약한 언어의 예는 bash, awk 및 PHP입니다.

또 다른 종류의 약한 유형의 언어는 C이며, 여기서 메모리 주소의 데이터는 캐스팅에 의해 다른 유형으로 취급 될 수 있습니다.

강력한 형식의 언어에서는 객체의 유형이 변경되지 않습니다. int는 항상 int이며 문자열로 사용하려고하면 오류가 발생합니다. Java와 Python은 모두 강력하게 형식화됩니다.

동적 유형 지정과 정적 유형 지정의 차이점은 유형 규칙이 적용되는 시점입니다. 정적으로 유형이 지정된 언어에서 모든 변수 및 매개 변수의 유형은 소스에서 선언해야하며 컴파일시 적용됩니다. 동적 형식 언어에서는 형식이 런타임에 사용될 때만 형식이 검사됩니다. 따라서 Java는 정적으로 유형이 지정되고 Python은 동적으로 유형이 지정됩니다.

그러나 때때로 경계가 약간 흐려질 수 있습니다. 예를 들어 Java는 정적으로 유형이 지정되지만 리플렉션 또는 캐스트를 사용할 때마다 (예 : Objects 컨테이너를 사용할 때) 런타임에 유형 검사를 연기합니다.

마찬가지로 가장 강력하게 입력 된 언어는 여전히 정수와 부동 소수점 사이에서 자동으로 변환됩니다 (일부 언어에서는 임의 정밀도 BigInts).


1
이 문장에 동의하지 않습니다-. "정적으로 유형이 지정된 언어에서는 모든 변수 및 매개 변수의 유형을 소스에 선언해야합니다."-SML에서는 변수 유형을 선언 할 필요가 없습니다 (단, 확인). 함수 f가 인수 x( fun f(x)) [**를 선언하지 않으므로 **]이고 함수 본문은입니다 x+1. 선언 된 형식이 없으면 컴파일러는 xint 여야 한다는 것을 알 수 있습니다. - fun f x = x + 1; val f = fn : int -> int
Filip Bartuzi

C와 관련하여, 캐스팅은 강력한 타이핑에 반대하지 않지만 C는 캐스팅 없이도 다른 유형을 추가 할 수 있습니다.5 + 'c' // OK
mehmet

3
@mehmet : C에서 문자 값은 정수 도메인에 있으므로 특정 예제가 형식 안전성을 위반하지 않습니다. 'c'는 99의 구문 설탕입니다. C에는 전용 문자 유형이 없습니다.
피터 Lewerin

Peter Lewerin : 그렇습니다. 불행히도, 내가 C :)를 건드리지 않은지 거의 20 년이 지났습니다.
mehmet

1
C는 약한 유형의 언어가 아닙니다 . Java, C # 등이 C와 비교하여 더 강력한 유형의 언어 일뿐입니다. 자세한 내용은 다음을 참조하십시오. en.wikipedia.org/wiki/Strong_and_weak_typing "약한"유형 언어의 정의를 확인한 경우 "약한"유형 언어 예를 들어 int를 "암시 적으로" 변환하거나 문자열로 캐스트 할 수있는 것과 같은 모든 유형의 변환을 수행 할 수있는 것이 있습니까?
hagrawal

15

오늘이 주제에 대해 연구 하면서이 위대한 기사 http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html 을 발견했습니다. 저를위한 것 그리고 나는 그것이 위의 위대한 답변 중 일부에 추가 될 수 있다고 생각했습니다.

강하고 약한 타이핑 :

유형 시스템이 분류되는 가장 일반적인 방법은 "강한"또는 "약한"것입니다. 이 단어는 거의 의미가 없기 때문에 불행한 일입니다. 두 언어를 매우 유사한 유형의 시스템과 비교하고 하나를이 두 시스템 중 더 강력한 것으로 지정할 수 있습니다. 그 외에도 그 단어는 전혀 의미가 없습니다.

정적 및 동적 유형

이것은 거의 의미가있는 유형 시스템의 거의 유일한 분류입니다. 사실, 그 중요성은 종종 과소 평가되고있다. [...] 동적 및 정적 타입 시스템은 완전히 다른 두 가지로, 목표가 부분적으로 겹치게된다.

정적 유형 시스템은 컴파일러가 소스 코드를 검사하고 레이블 ( "유형"이라고 함)을 구문 조각에 할당 한 다음이를 사용하여 프로그램의 동작에 대한 무언가를 유추하는 메커니즘입니다. 다이나믹 타입 시스템은 컴파일러가 프로그램에서 사용하는 일종의 데이터 ( "타입"이라고도 함)를 추적하는 코드를 생성하는 메커니즘입니다. 물론이 두 시스템에서 같은 단어 "유형"을 사용하는 것은 실제로 우연의 일치가 아닙니다. 그러나 그것은 일종의 약한 역사적 중요성을 갖는 것으로 가장 잘 이해됩니다. "유형"이 실제로 두 시스템에서 동일한 것을 의미하는 세계관을 찾으려고 시도한 결과 큰 혼란이 생겼습니다. 그렇지 않습니다.

명시 적 / 암시 적 유형 :

이 용어가 사용될 때, 컴파일러는 프로그램의 정적 유형 부분에 대해 추론 할 정도를 나타냅니다. 모든 프로그래밍 언어에는 유형에 대한 추론 형식이 있습니다. 어떤 것들은 다른 것보다 더 있습니다. ML과 Haskell은 암시 적 타입을 가지고 있는데, 타입 선언이 필요하지 않거나 거의 사용되지 않습니다. Java와 Ada는 매우 명시적인 유형을 가지고 있으며 지속적으로 유형을 선언하고 있습니다. 위의 모든 것은 (예를 들어 C 및 C ++에 비해) 강력한 정적 유형 시스템을 가지고 있습니다.


8

Scott의 Programming Language Pragmatics , 3 판, 291 페이지에서

유형 검사는 프로그램이 언어의 유형 호환성 규칙을 준수하도록하는 프로세스입니다. 규칙 위반은 유형 충돌이라고합니다. 언어 구현이 언어를 구현할 수있는 방식으로 해당 작업을 지원하지 않는 개체에 대한 작업의 적용을 금지하는 경우 언어를 강력하게 입력 했다고합니다. 언어는 강력하게 유형이 정해지고 유형 검사가 컴파일 타임에 수행 될 수있는 경우 정적으로 유형 이 정해집니다. 가장 엄격한 의미에서 정적으로 유형이 지정된 언어는 거의 없습니다. 실제로이 용어는 대부분의 유형 검사가 컴파일 타임에 수행 될 수 있고 나머지는 런타임에 수행 될 수있는 언어에 종종 적용됩니다.

몇 가지 예 : Ada는 강력하게 형식화되어 있으며 대부분 정적으로 형식화되어 있습니다 (실행시 특정 형식 제약 조건을 확인해야 함). Pascal 구현은 컴파일 타임에 대부분의 유형 검사를 수행 할 수 있지만 언어는 그다지 강력하게 형식화되어 있지 않습니다. C89는 이전의 방언보다 훨씬 강력하지만 파스칼보다 훨씬 덜 강합니다. 루프 홀에는 공용체, 가변 개수의 매개 변수가있는 서브 루틴 및 포인터와 배열의 상호 운용성 (섹션 7.7.1에서 설명)이 포함됩니다. C 구현은 런타임에 아무것도 확인하지 않습니다.

동적 (런타임) 유형 검사는 늦은 바인딩 형태이며 런타임까지 다른 문제를 지연시키는 언어에서도 발견되는 경향이 있습니다. 리스프와 스몰 토크는 동적으로 (강력하지만) 타이핑됩니다. 대부분의 스크립팅 언어는 동적으로 입력됩니다. 일부 (예 : Python 및 Ruby)는 강력하게 입력됩니다. 동적 범위를 가진 언어는 일반적으로 동적으로 형식이 지정되거나 전혀 형식이 지정되지 않습니다. 컴파일러에서 이름이 참조하는 개체를 식별 할 수없는 경우 일반적으로 개체의 형식도 확인할 수 없습니다.

간단히 말해서 정적 / 동적 타이핑은 유형 검사가 발생하는 시간, 즉 정적 타이핑을위한 컴파일 시간 및 동적 언어를위한 런타임을 나타냅니다. 마찬가지로 강력한 타이핑은 언어가 유형 시스템을 시행하는 데 얼마나 적극적인지를 나타냅니다.

Scott의 설명을 멋진 다이어그램으로 변환하려고했는데 아래에 게시했습니다.

정적 / 동적-강력 / 약한 입력 평면


5

다른 동료들도 잘 해냈다 고 생각합니다. 정적 타이핑과 동적 타이핑의 차이점을 설명합니다. 그러나 강하고 약한 타이핑에 관한 한, 이해와 견해가 다르다고 말해야합니다.

다음은 두 가지 예입니다.

  • 일부는 만들 수 없습니다 때문에 하스켈은 강력하게 입력했는지 말을 어떤 형식 변환합니다.

  • 다른 사람들 (예를 들어 Dario의 견해)에 따르면 의도적으로 문자열에서 숫자로 암시 적으로 변환 할 수있는 언어는 약하게 입력되었지만 다른 사람들조차도 이것을 오리 입력이라고합니다.

두 진술은 유형 시스템의 반대 극단이 아니라 완전히 다른 측면을 강조합니다. 그래서 저는 램지 씨의 견해에 따라 유형 시스템을 구별하기 위해 "강한"과 "약한"이라는 용어를 사용하지 않는 것이 좋습니다.


5

정적 v / s 동적 유형 언어

  • 정적으로 유형이 지정된 언어는 컴파일 타임에 유형 검사가 수행되는 언어이므로 정적으로 유형이 지정된 언어에서는 각 변수에 유형이 있으며 과정에서 변경되지 않습니다. 반대로 동적 유형 언어는 런타임에 유형 검사가 수행되는 언어이며 컴파일 타임에 유형 검사가 없으므로 동적 유형 언어의 경우 변수와 연관된 유형이 있거나 없을 수 있음을 의미합니다. 유형이 연결되면 JS의 "var"과 같은 일반 유형으로 문자열과 숫자 모두에 적합합니다.
    • “동적 형식 검사 언어의 구현은 일반적으로 각 런타임 개체를 형식 정보가 포함 된 형식 태그 (예 : 형식에 대한 참조)와 연결합니다. 이 RTTI (런타임 유형 정보)를 사용하여 동적 디스패치, 늦게 바인딩, 다운 캐스팅, 리플렉션 및 유사한 기능을 구현할 수 있습니다.”
  • 언어가 정적으로 유형이 지정되어 있어도 동적으로 유형이 지정된 기능을 가질 수 있습니다. 이는 기본적으로 런타임에 일종의 유형 검사도 의미합니다. 유형 캐스팅에 유용합니다.
    • “다운 캐스팅과 같이 여러 가지 유용하고 일반적인 프로그래밍 언어 기능을 정적으로 확인할 수 없습니다. 따라서 많은 언어에서 정적 및 동적 유형 검사를 수행합니다. 정적 유형 검사기는 가능한 것을 검증하고 동적 검사는 나머지를 검증합니다.”
  • “일부 언어에서는 형식이 안전하지 않은 코드를 작성할 수 있습니다. 예를 들어 C에서 프로그래머는 크기가 같은 두 유형간에 값을 자유롭게 캐스트 할 수 있습니다.”
  • "정적으로"형식화 된 언어의 장점은 다음과 같습니다.
    • 대부분의 유형 검사는 컴파일 타임에 수행되므로 유형에 대해 걱정하지 않고 인터프리터 또는 런타임을 최고 속도로 실행할 수 있습니다.
    • 대부분의 유형 검사는 컴파일 타임에 수행되므로 런타임 예외 수 또는 유형과 관련된 오류가 줄어 듭니다.
  • "동적"유형 언어의 장점은 다음과 같습니다.
    • 개발자가 타입 시스템을 이해할 필요가 없으므로 개발자가 느슨하게 변수를 생성하고 실행할 수 있기 때문에 프로토 타입 제작이 매우 빠르므로 프로토 타입 제작이 매우 빠릅니다.
  • 정적 및 동적 유형 언어 목록 :
    • 정적으로 :
      • 자바
      • C (C는 정적으로 형식화 된 언어이지만 더 암시적인 변환을 허용하기 때문에 Java에 비해 "강력한"형식은 아닙니다)
      • C ++
      • 씨#
    • 동적으로 :
      • PHP
      • 파이썬
      • 자바 스크립트
      • 루비
  • 유형 검사는 중요한 보안 기능입니다. 유형 검사가없고 메소드가“creditAccount (BankAccountDetails)”라는 메소드가있는“BankAccount”유형의 오브젝트를 승인한다고 가정하십시오. 이제 유형 점검이없는 경우 런타임에 자체 오브젝트를 전달할 수 있습니다. OOP가“다형성”을 지원하기 때문에 객체 지향 언어에 대해 이야기하고 있으며 여기서 논의하는 것은“다형성”에 지나지 않습니다. 따라서 기본적으로 객체 유형 언어 (기본적으로 "다형성"을 지원함)는 강력한 유형 검사 기능이 없으므로 보안 문제가 발생할 수 있습니다.

약한 유형의 언어를 강력하게 v / s

  • 강력한 형식의 언어는 정밀도 손실이있을 경우 암시 적 변환이 허용되지 않는 언어입니다. 예를 들어, Java에서는 정밀도 손실이 없기 때문에 "int to long"을 캐스트 할 수 있지만 정밀도 손실이 있기 때문에 "int to long"을 "암시 적으로"캐스트 할 수는 없습니다. 반대로 약한 유형의 언어에서는 정밀도 손실이 있어도 암시 적 변환이 허용됩니다.
  • "런타임"에서 정밀도가 떨어지는 암시 적 변환을 허용하지 않는 경우 동적 형식 언어도 강력한 형식 언어가 될 수 있다고 생각합니다.

더 좋은 독서


"현재 유형 검사가 없으면 런타임에"creditAccount (BankAccountDetails) "와 같은 메서드를 가진 내 클래스의 객체를 전달할 수 있습니다. 이미 객체 전달을 차단할 수있는 메커니즘을 능가한 경우 정적 유형 언어의 경우 유형 검사를 통해 해당 메소드를 호출하지 못하게하는 방법
Aseem Yadav

@AseemYadav "* 객체를 전달하지 못하게 막을 수있는 메커니즘을 이미 능가했다면"*은 무슨 뜻입니까?
hagrawal

당신이 언급했듯이 그것은 중요한 보안 기능이며, 같은 방법으로 자신의 클래스의 객체를 전달할 수 있기 때문에 다른 사람의 코드를 침입하려고 할 때 단지 취약점 인 것처럼 보입니다. 보안 관련 문제보다 성능 문제보다 자신에게 속한 코드와 관련하여 말하고 있습니까?
Aseem Yadav

그것의 성능 측면은 없으며, 당신은 다형성의 맥락에서 그것을보아야합니다. 그런 다음 당신은 그것의 보안 측면을 이해할 수 있습니다. 나는 이것을 동일한 단락에서 언급했습니다.
hagrawal

1

정적으로 유형이 지정된 언어는 일반적으로 변수 유형을 선언해야하며 컴파일 시간에 검사하여 오류를 줄입니다. "정적 유형"의 단어 "정적"은 코드를 실행하기 전에 코드를 검사하는 프로세스 인 "정적 코드 분석"을 나타냅니다. 정적 유형 언어가 표현식 또는 실제 매개 변수의 오른쪽에서 변수 유형을 유추하는 것이 가능하지만 실제로 대부분의 정적 유형 언어는 변수 유형을 명시 적으로 선언해야합니다.

동적 형식 언어는 일반적으로 변수 선언에 형식이 필요하지 않으며 모든 할당 문의 오른쪽 또는 실제 매개 변수를 함수 호출로 평가 한 결과 계산 된 형식에 따라 변수 형식을 유추합니다. 변수는 수명 기간 동안 여러 번 할당 될 수 있기 때문에 시간이지나면서 유형이 변경 될 수 있으므로 "동적 유형"이라고합니다. 또한 런타임 환경은 각 변수의 현재 유형을 추적해야하므로 유형은 변수 선언이 아닌 값에 바인딩됩니다. 이는 RTTI (런타임 유형 정보) 시스템으로 간주 될 수 있습니다.

정적 및 동적 유형 언어 요소를 결합 할 수 있습니다. 예를 들어 C #은 정적 및 동적 형식 변수를 모두 지원하며 개체 지향 언어는 일반적으로 형식 계층 구조의 다운 캐스팅을 지원합니다. 정적 형식 언어는 일반적으로 캐스팅, 리플렉션 및 동적 호출을 사용하여 형식 검사를 우회하는 다양한 방법을 제공합니다.

Strong vs. Weak Typing은 변수가 마치 실제로는 다른 유형일 때와 같이 변수를 사용하여 버그를 예방하려고 시도하는 연속체를 나타냅니다. 예를 들어 C와 Java는 모두 정적으로 유형이 지정된 언어이지만 Java는 C보다 훨씬 강력한 유형 검사를 사용합니다. 다음 C 코드는 컴파일 및 실행이 행복하며 런타임에 변수 b에 임의의 값을 넣습니다. 곤충:

char *a = "123";
int b = (int)a;

동등한 Java 코드는 컴파일 오류를 생성하며 일반적으로 바람직합니다.

String a = "123"
int b = (int)a;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.