# Unterschied Long - Int



## Guest (5. Jun 2008)

Hi, ist der einzige Unterschied zwischen long und int dass long eine größere Zahl sein kann wie int, und damit verbunden auch mehr Speicher wegnimmt ? Wenn man aber mit ihnen rechenoperationen durchführt müssten sie doch genauso schnell sein oder ?


----------



## FArt (5. Jun 2008)

Die Änderung auf einem long Wert ist z.B.  nicht atomar.

http://www.rz.uni-hohenheim.de/anw/programme/prg/java/tutorials/javainsel4/javainsel_09_009.htm#Rxx365java09009040002D61F02B100


----------



## tfa (5. Jun 2008)

Kommt das nicht auch auf die Bittigkeit der Java-VM an?


----------



## Gast (5. Jun 2008)

die größe der primitiven typen ist zwar immer gleich, aber intern könnte eine vm durchaus andere typen verwenden, wie z.b. alles in 64 bit integer zu pappen. ob eine vm garantieren muss, dass zugriff auf 32 bit typen (int) atomar ist, müsste in der spezifikation stehen. ich glaubs aber eigentlich nicht.


----------



## FArt (6. Jun 2008)

Gast hat gesagt.:
			
		

> die größe der primitiven typen ist zwar immer gleich, aber intern könnte eine vm durchaus andere typen verwenden


jein  :wink: 



			
				Gast hat gesagt.:
			
		

> ob eine vm garantieren muss, dass zugriff auf 32 bit typen (int) atomar ist, müsste in der spezifikation stehen. ich glaubs aber eigentlich nicht.


doch  :wink: 




			
				tfa hat gesagt.:
			
		

> Kommt das nicht auch auf die Bittigkeit der Java-VM an?



Tja, hilft das weiter? Nein.

Java ist plattformunabhängig. Entweder eine Eigenschaft wird zugesichdert, oder eben nicht. Wenn nicht, muss ich als Entwickler entsprechend handeln, auch wenn das Problem bisher vermutlich nur in der Theorie existiert.

aus JSR-133 Kapitel 12:


> VM implementors are encouraged to avoid splitting their 64-bit values where possible. Programmers
> are encouraged to declare shared 64-bit values as volatile or synchronize their programs
> correctly to avoid possible complications.


----------



## tfa (6. Jun 2008)

FArt hat gesagt.:
			
		

> tfa hat gesagt.:
> 
> 
> 
> ...



Du hast behauptet, long-Variablen werden nicht atomar geschrieben. Und das ist so nicht richtig:



			
				JLS 17.7 hat gesagt.:
			
		

> Java virtual machines are free to perform writes to long and double values atomically or in two parts.


Plattformunabhängigkeit bedeutet nicht, dass es keine verschiedenen Implementierungen der VM gibt, die sich unterscheiden.



			
				FArt hat gesagt.:
			
		

> Wenn nicht, muss ich als Entwickler entsprechend handeln, auch wenn das Problem bisher vermutlich nur in der Theorie existiert.


Das ist richtig.


----------



## FArt (6. Jun 2008)

tfa hat gesagt.:
			
		

> Du hast behauptet, long-Variablen werden nicht atomar geschrieben. Und das ist so nicht richtig:



Ja, das war unsauber formuliert. Es geht darum, dass ich mich nicht darauf verlassen kann... und somit kommt es für mich auf das selbe heraus. Es wird sogar explizit darauf hingewiesen sich nicht darauf zu verlassen. Deutlicher geht es eigentlich nicht.



			
				tfa hat gesagt.:
			
		

> Plattformunabhängigkeit bedeutet nicht, dass es keine verschiedenen Implementierungen der VM gibt, die sich unterscheiden.


Das stimmt, aber Java bietet mir, definiert über die Version der JRE, einen verlässlichen Funktionsumfang, unabhängig von VM Implementierung und Plattform. Wenn ich mit Java unterscheiden muss, wo das Programm laufen wird, dann hätte Java ein wichtiges Ziel verfehlt...


----------



## Guest (7. Jun 2008)

FArt hat gesagt.:
			
		

> Wenn ich mit Java unterscheiden muss, wo das Programm laufen wird, dann hätte Java ein wichtiges Ziel verfehlt...



jemals mit convenience frameworks wie swt gearbeitet? oder ein stück software entwickelt, das dateioperationen durchführt? plattformunabhängigkeit mit java ist in realen bedingungen lediglich ein gerücht.


----------



## maki (7. Jun 2008)

Anonymous hat gesagt.:
			
		

> FArt hat gesagt.:
> 
> 
> 
> ...


Sehe ich anders, das Projekt in dem ich gerade mitarbeite wird auf Windows enwickelt (Tomcat + JBoss), auf Linux gestestet und auf Sun Solaris deployed.

Sicher gibt es Projekte die Plattformabhängig sind, aber ein Gerücht ist etwas anderes


----------



## FArt (7. Jun 2008)

Anonymous hat gesagt.:
			
		

> jemals mit convenience frameworks wie swt gearbeitet?


Nö... Swing, Struts, JSF funktionieren super... wozu also?



			
				Anonymous hat gesagt.:
			
		

> oder ein stück software entwickelt, das dateioperationen durchführt?


Ich denke das habe ich. Sogar ohne Umwege oder Probleme.

Ich habe auch schon ein Stück Java Software geschrieben, welches Prozesse und Skripten forkt, überwacht usw. Das gleiche für Dienste.
Man konnte hervorragend die plattformabhängigen Teile kapseln. Ansonsten verlasse ich mich auf die Spec... und das kann man auch.

Wenn man andere Erfahrung gemacht hat, hat man gleichzeitig einen Designfehler gemacht: dann war nämlich die gewählte Programmiersprache für das Problem einfach nicht geeignet.


----------

