100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Apex Data Types

An overview of Apex's primitive types, collection types (List, Set, Map), sObjects and IDs, and the rules governing type conversion and null handling.

FoundationsBeginner9 min readJul 10, 2026
Analogies

Primitive Data Types

Apex provides a set of built-in primitive types including Integer, Long, Double, Decimal, Boolean, String, Date, Datetime, ID, and Blob. Because Apex is strongly typed, every variable's type is fixed at declaration and checked at compile time, so a variable declared as one type can never later hold a value of an incompatible type.

🏏

Cricket analogy: Like every field on a scorecard having a fixed role - a bowler's economy-rate field can't suddenly hold a batting average, just as an Integer variable can't hold a String.

Collections: List, Set, Map

Apex has three core collection types: List<T>, an ordered, indexable collection that allows duplicate values; Set<T>, an unordered collection that enforces unique elements; and Map<K,V>, which stores key-value pairs, most commonly seen as Map<Id, sObject> for quick record lookups by ID.

🏏

Cricket analogy: A List is like a fixed batting order that can repeat a player across a series, a Set is like a squad list of unique players with no duplicates, and a Map is like a scorecard mapping each player's ID to their individual stats.

sObjects and Special Types (ID, Blob)

An sObject is the generic base type representing any Salesforce record, whether it's a standard object like Account or Contact, or a custom object; a specific query result is typically typed as a concrete sObject subtype such as List<Account>. The ID type is a special string-like type used for record identifiers, available in both 15-character (case-sensitive) and 18-character (case-insensitive) forms, while Blob stores raw binary data such as files or images.

🏏

Cricket analogy: An sObject is like a generic 'player record' template that can represent a batter or bowler depending on which object it is, an ID is like a player's unique registration number issued by the cricket board, and a Blob is like the raw video file of a player's dismissal.

Type Conversion and Null Handling

Apex allows implicit widening conversions, such as an Integer being automatically converted to a Double, but narrower conversions require explicit casting or dedicated conversion methods. Uninitialized variables default to null, and calling a method or accessing a field on a null reference throws a System.NullPointerException, which will abort the transaction if it isn't caught.

🏏

Cricket analogy: Like a scorer automatically converting overs-and-balls into a decimal without being asked, while converting strike rate into a run-rate projection needs an explicit calculation - and forgetting to check a player's fitness status (null) before selection causes a team-sheet error.

apex
List<Contact> contacts = [SELECT Id, Name, Email FROM Contact LIMIT 10];
Set<String> uniqueEmails = new Set<String>();
Map<Id, Contact> contactsById = new Map<Id, Contact>(contacts);

for (Contact c : contacts) {
    if (c.Email != null) {
        uniqueEmails.add(c.Email);
    }
}

The ID type in Apex can be either 15 characters, case-sensitive, used in the UI, or 18 characters, case-insensitive, used in the API and Apex code and safe for comparisons - Apex automatically accepts both formats interchangeably.

Always null-check a variable before calling a method or accessing a field on it. Writing myAccount.Name when myAccount is null throws a System.NullPointerException that will abort the transaction if it isn't caught.

  • Apex supports primitive types including Integer, Double, Decimal, Boolean, String, Date, Datetime, ID, and Blob.
  • List<T> is ordered and allows duplicates; Set<T> is unordered and enforces uniqueness; Map<K,V> stores key-value pairs.
  • sObject is the generic base type for any Salesforce record, standard or custom.
  • The ID type uniquely identifies records and comes in 15-character (case-sensitive) or 18-character (case-insensitive) forms.
  • Blob stores binary data such as file attachments or images.
  • Uninitialized variables default to null; calling a method on a null reference throws a NullPointerException.
  • Implicit widening conversions happen automatically, but narrowing conversions need explicit casting.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#ApexSalesforceStudyNotes#ApexDataTypes#Apex#Data#Types#Primitive#StudyNotes#SkillVeris#ExamPrep