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.
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
1. Which collection type stores unique, unordered elements in Apex?
2. What special Apex type represents a record's unique identifier?
3. What does a Map<Id, sObject> typically store?
4. What is Blob used for in Apex?
5. What happens if you call a method on a variable that is null?
Was this page helpful?
You May Also Like
Apex Syntax and Variables
Covers the foundational rules of Apex syntax, how to declare and scope variables, naming conventions, and how comments structure readable code.
What Is Apex?
An introduction to Apex, Salesforce's proprietary programming language, covering how it runs on the platform, its core characteristics, and when to use it instead of declarative tools.
Your First Apex Class
A hands-on walkthrough of writing a simple Apex class, covering class structure, methods, access modifiers, static vs instance members, and how to test it.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics