decoration decoration
Stories

GROKLAW
When you want to know more...
decoration
For layout only
Home
Archives
Site Map
Search
About Groklaw
Awards
Legal Research
Timelines
ApplevSamsung
ApplevSamsung p.2
ArchiveExplorer
Autozone
Bilski
Cases
Cast: Lawyers
Comes v. MS
Contracts/Documents
Courts
DRM
Gordon v MS
GPL
Grokdoc
HTML How To
IPI v RH
IV v. Google
Legal Docs
Lodsys
MS Litigations
MSvB&N
News Picks
Novell v. MS
Novell-MS Deal
ODF/OOXML
OOXML Appeals
OraclevGoogle
Patents
ProjectMonterey
Psystar
Quote Database
Red Hat v SCO
Salus Book
SCEA v Hotz
SCO Appeals
SCO Bankruptcy
SCO Financials
SCO Overview
SCO v IBM
SCO v Novell
SCO:Soup2Nuts
SCOsource
Sean Daly
Software Patents
Switch to Linux
Transcripts
Unix Books

Gear

Groklaw Gear

Click here to send an email to the editor of this weblog.


You won't find me on Facebook


Donate

Donate Paypal


No Legal Advice

The information on Groklaw is not intended to constitute legal advice. While Mark is a lawyer and he has asked other lawyers and law students to contribute articles, all of these articles are offered to help educate, not to provide specific legal advice. They are not your lawyers.

Here's Groklaw's comments policy.


What's New

STORIES
No new stories

COMMENTS last 48 hrs
No new comments


Sponsors

Hosting:
hosted by ibiblio

On servers donated to ibiblio by AMD.

Webmaster
Stop using "API" jargon, just say "interface" | 503 comments | Create New Account
Comments belong to whoever posts them. Please notify us of inappropriate comments.
Stop using "API" jargon, just say "interface"
Authored by: Anonymous on Monday, April 23 2012 @ 11:14 AM EDT
That's actually not true for Java. (It is true in real object-oriented
languages like Smalltalk and Self).

In Java, an int or float is a primitive value type. Instances of classes are
reference types, and those classes all derive directly or indirectly from
java.lang.Object, and the instances are heap-allocated (except if your VM is
extremely clever at optimizing the allocations). The type system lets you *use*
an int or float in places where a java.lang.Object is expected, which results in
"auto-boxing" of the primitive value type into a heap-allocated
object. In other words, an "int foo" does not have object identity,
and you can't take its address. But when it gets auto-boxed into an Integer
object, now it *does* have an object identity and this is a different identity
from some other boxed Integer (even if they contain the same value). When you
cast this Integer object back to an int, it extracts the primitive value from
inside the boxed object. So putting int and float into generic containers can
cause problems related to object identity that will be very confusing unless you
know what to expect.

The C# language does this somewhat better; the C# type system includes a type
for "struct" as a subtype of the root "object" type, and
everything derived from this "struct" type is treated as a value type.
That includes primitive value types like int/float, and also user-defined value
types like "struct Foo { ... }". The auto-boxing system is similar,
but C# generics make it easier to design types that work for any value type
(primitive or struct or whatever) without having to box it.

[ Reply to This | Parent | # ]

Groklaw © Copyright 2003-2013 Pamela Jones.
All trademarks and copyrights on this page are owned by their respective owners.
Comments are owned by the individual posters.

PJ's articles are licensed under a Creative Commons License. ( Details )