PrepGo

Casting and Range of Variables - AP Computer Science A Study Guide

Written by AP Content Team, Verified for 2026 AP Exams, Last updated: May 2026

Learn with study guides reviewed by top AP teachers. This guide takes about 13 minutes to read.

Getting Started

In programming, we often work with different types of numerical data, such as whole numbers and numbers with decimal points. Java stores these values in different ways, each with its own set of rules and limitations. This topic explores how to manage these differences, convert between numerical types when necessary, and understand the boundaries of the values a variable can hold to prevent unexpected errors in our calculations.

What You Should Be Able to Do

  • Evaluate arithmetic expressions that convert a whole number (int) to a decimal number (double).

  • Evaluate arithmetic expressions that convert a decimal number (double) to a whole number (int).

  • Predict the result of division operations involving two integers.

  • Describe the outcome when an integer variable is assigned a value outside of its storable range.

Key Concepts & Java Implementation

The Core Idea

Java provides several primitive types for storing fundamental data values. The two most common for numbers are int for integers (whole numbers) and double for floating-point numbers (values with decimal points).

Because a computer's memory is finite, each of these types has a limited range. An int can only store whole numbers from -2,147,483,648 to 2,147,483,647. If a calculation exceeds this range, an overflow or underflow occurs, causing the value to "wrap around."

The distinction between int and double is most critical during division. Dividing one int by another int performs integer division, where any fractional part of the result is discarded. To perform floating-point division and retain the decimal, at least one of the numbers must be a double. We can force this conversion using an operation called casting.

Casting is the process of explicitly telling Java to convert a value of one data type into another. This gives us precise control over how mathematical expressions are evaluated.

Syntax & Implementation

Casting and Division

The primary tool for conversion is the cast operator, which is the desired type's name in parentheses (type).

OperationSyntaxJava ExampleResult & Explanation
Cast to int(int) expression(int) 7.957. The decimal part is truncated (cut off), not rounded.
Cast to double(double) expression(double) 1010.0. The value is converted to its floating-point representation.

Let's see how casting affects division.


// Example 1: Integer Division


int a = 10;

int b = 4;

int intResult = a / b; // 10 divided by 4 is 2.5, but the .5 is discarded.

// intResult is now 2.


System.out.println("10 / 4 = " + intResult);

To get a precise decimal result, we must cast one of the integer operands to a doublebefore the division occurs. This "promotes" the entire expression to use floating-point arithmetic.


// Example 2: Casting for Floating-Point Division


int a = 10;

int b = 4;


// Cast 'a' to a double before the division.

double doubleResult = (double) a / b; // The expression becomes 10.0 / 4.

// doubleResult is now 2.5.


System.out.println("(double) 10 / 4 = " + doubleResult);

Variable Ranges and Overflow

The Integer class contains helpful constants, MAX_VALUE and MIN_VALUE, that hold the largest and smallest possible values for an int.


// Example 3: Integer Overflow and Underflow


// The largest possible int value

int max = Integer.MAX_VALUE; // 2,147,483,647

System.out.println("Max int: " + max);


// Adding 1 to the maximum value causes an overflow

int overflow = max + 1;

System.out.println("Max int + 1 = " + overflow); // Wraps around to the minimum value


// The smallest possible int value

int min = Integer.MIN_VALUE; // -2,147,483,648

System.out.println("Min int: " + min);


// Subtracting 1 from the minimum value causes an underflow

int underflow = min - 1;

System.out.println("Min int - 1 = " + underflow); // Wraps around to the maximum value

Tracing & Analysis

Let's trace the assignment of a mixed-type expression.

Code:

double price = 12.5;

int quantity = 3;

int totalCost = (int) (price * quantity);

Execution Trace:

  1. price * quantity is evaluated. Since price is a double, Java treats this as floating-point multiplication: 12.5 * 3 results in 37.5.

  2. The result, 37.5, is then cast to an int using (int).

  3. The cast (int) 37.5 truncates the decimal portion, resulting in the integer value 37.

  4. The value 37 is assigned to the int variable totalCost.

Analysis:

Notice that the conversion from double to int is a "narrowing conversion" because information (the decimal part) can be lost. This is why Java requires an explicit cast; it forces the programmer to acknowledge that data loss is possible. Without the (int) cast, the code int totalCost = price * quantity; would produce a compile-time error.

Java Syntax Quick-Reference

A compact list of the syntax and constants introduced in this topic.

  • (int) value: A cast operator that converts value to the int type, truncating any decimal part.

  • (double) value: A cast operator that converts value to the double type.

  • Integer.MAX_VALUE: A class constant that holds the largest value an int can store (2,147,483,647).

  • Integer.MIN_VALUE: A class constant that holds the smallest value an int can store (-2,147,483,648).

Core Code Examples & Terminology

  • Primitive Type: A fundamental data type built into Java, such as int, double, and boolean. It stores a simple value directly and is not an object.

  • Casting: The explicit conversion of a value from one data type to another using the (type) syntax.

  • Truncation: The process of removing the fractional part of a number, leaving only the integer part. This occurs when casting a double to an int.

  • Overflow: An error condition that occurs when a numerical calculation produces a result that is greater than the maximum value the data type can store. In Java, this causes the value to "wrap around" to the minimum value.

  • Integer Division:

    
    int result = 11 / 4; // result is 2
    

    When dividing two integers, the result is also an integer, and any remainder is discarded.

  • Casting for Double Division:

    
    double preciseResult = (double) 11 / 4; // preciseResult is 2.75
    

    Casting one operand to a double before division ensures a floating-point calculation is performed.

  • Casting to an Integer:

a int dollars = (int) 29.99; // dollars is 29

```

Casting a `double` to an `int` truncates the value, effectively removing everything after the decimal point.
  • Demonstrating Overflow:

    
    int x = Integer.MAX_VALUE;
    
    x = x + 1; // x is now Integer.MIN_VALUE
    

    Adding to the maximum integer value causes it to wrap around to the minimum value.

Core Skill Check

  • Code Tracing: What is the final value of z after this Java code runs: int x = 5; int y = 2; double z = x / y;?

  • Debugging: Identify the compile-time error in this Java code: int items = 4; double average = 15.5 / items; int result = average;.

  • Application: Write a single line of Java code that declares a double variable named average and initializes it to the average of three int variables score1, score2, and score3.

Common Misconceptions & Errors

  1. Casting Rounds Numbers: The cast (int) 9.9 does not round to 10. It always truncates, resulting in 9.

  2. Casting After Division: Writing (double) (5 / 2) will not produce 2.5. The integer division 5 / 2 is performed first, resulting in 2. The code then casts 2 to 2.0. The precision is lost before the cast ever happens. The correct form is (double) 5 / 2.

  3. Assuming All Numbers Fit: Forgetting that int has a fixed range can lead to subtle bugs where large numbers suddenly become negative due to overflow.

  4. Implicit Narrowing: Java will not automatically convert a double to an int because it involves data loss. int x = 3.14; is an error. You must explicitly cast it: int x = (int) 3.14;.

Summary

Java uses distinct primitive types, int and double, to handle whole and decimal numbers. Each type has a specific range and behavior in arithmetic operations. Integer division discards the remainder, producing an integer result. To perform accurate floating-point division with integers, you must use the cast operator, such as (double), to convert an operand before the calculation. Casting a double to an int truncates the decimal value. Finally, int variables are finite; exceeding their maximum or minimum values results in overflow or underflow, where the value wraps around. Mastering these rules is essential for writing correct and predictable numerical code.