Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Feb 10, 2024. It is now read-only.

Commit 6a1f962

Browse files
author
Ram swaroop
committed
added content
1 parent 90b2ccc commit 6a1f962

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

‎_posts/2015-05-14-variables-and-literals.md‎

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,52 @@ __different__ from the type of literal/object it's holding/referring, you may re
257257
Casting can be done by the compiler _(implicit cast)_ or by you _(explicit cast)_. Typically, an implicit cast happens
258258
when you're doing a __widening conversion__, in other words, putting a smaller thing (say, a byte) into a bigger container
259259
(such as an int). But when you try to put a large value into a small container (referred to as __narrowing__), you should
260-
do an explicit cast, where you tell the compiler that you're aware of the danger and accept full responsibility.
260+
do an explicit cast, where you tell the compiler that you're aware of the danger and accept full responsibility. Let's
261+
for example consider the below program:
262+
263+
{% highlight java linenos %}
264+
class Casting {
265+
public static void main(String [] args) {
266+
long a = 100; // literal '100' is implicitly an 'int'
267+
//but the compiler does an implicit cast
268+
int b = (int) 10.23; // literal '10.23' is implicitly a 'double'
269+
// so we require an explicit cast
270+
int x = 3957.229; // illegal, can't store a large value in a
271+
// small container without explicit cast
272+
}
273+
}
274+
{% endhighlight %}
275+
276+
There is another rule which you must be aware of, i.e, __the result of an expression involving anything int-sized or
277+
smaller is always an `int`__. Check this out:
278+
279+
{% highlight java %}
280+
byte a = 3; // No problem, 3 fits in a byte
281+
byte b = 8; // No problem, 8 fits in a byte
282+
byte c = a + b; // Should be no problem, sum of the two bytes
283+
// fits in a byte
284+
{% endhighlight %}
285+
286+
The last line won't compile! You'll get an error like this:
287+
288+
{% highlight java %}
289+
TestBytes.java:5: possible loss of precision
290+
found : int
291+
required: byte
292+
byte c = a + b;
293+
^
294+
{% endhighlight %}
295+
296+
Doing an explicit cast like:
297+
298+
{% highlight java %}
299+
byte c = (byte) (a + b);
300+
{% endhighlight %}
301+
302+
solves the issue.
303+
304+
#### What happens when you cast a large value to store it in a small container
305+
261306

262307

263308

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /