﻿---
title: Variables
description: A variable loads and stores a value for evaluation during operations. Declare a variable before use with the format of type followed by identifier. Declare...
url: https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-variables
products:
  - Painless
---

# Variables
A variable loads and stores a value for evaluation during [operations](https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-operators).

## Declaration

Declare a variable before use with the format of [type](https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-types) followed by [identifier](https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-identifiers). Declare an [array type](/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-types#array-type) variable using an opening `[` token and a closing `]` token for each dimension directly after the identifier. Specify a comma-separated list of identifiers following the type to declare multiple variables in a single statement. Use an [assignment operator](#variable-assignment) combined with a declaration to immediately assign a value to a variable. A variable not immediately assigned a value will have a default value assigned implicitly based on the type.
**Errors**
- If a variable is used prior to or without declaration.

**Grammar**
```text
declaration : type ID assignment? (',' ID assignment?)*;
type: ID ('.' ID)* ('[' ']')*;
assignment: '=' expression;
```

**Examples**
- Different variations of variable declaration.
  ```java
  int x;           
  List y;          
  int x, y = 5, z; 
  def d;           
  int i = 10;      
  float[] f;       
  Map[][] m;       
  ```


## Assignment

Use the `assignment operator '='` to store a value in a variable for use in subsequent operations. Any operation that produces a value can be assigned to any variable as long as the [types](https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-types) are the same or the resultant type can be [implicitly cast](https://www.elastic.co/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-casting) to the variable type.
**Errors**
- If the type of value is unable to match the type of variable.

**Grammar**
```text
assignment: ID '=' expression
```

**Examples**
- Variable assignment with an integer literal.
  ```java
  int i;  
  i = 10; 
  ```
- Declaration combined with immediate assignment.
  ```java
  int i = 10;     
  double j = 2.0; 
  ```
- Assignment of one variable to another using primitive type values.
  ```java
  int i = 10; 
  int j = i;  
  ```
- Assignment with reference types using the [new instance operator](/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-operators-reference#new-instance-operator).
  ```java
  ArrayList l = new ArrayList(); 
  Map m = new HashMap();         
  ```
- Assignment of one variable to another using reference type values.
  ```java
  List l = new ArrayList(); 
  List k = l;               
  List m;                   
  m = k;                    
  ```
- Assignment with array type variables using the [new array operator](/elastic/docs-builder/docs/2439/reference/scripting-languages/painless/painless-operators-array#new-array-operator).
  ```java
  int[] ia1;                   
  ia1 = new int[2];            
  ia1[0] = 1;                  
  int[] ib1 = ia1;             
  int[][] ic2 = new int[2][5]; 
  ic2[1][3] = 2;               
  ic2[0] = ia1;                
  ```