diff --git a/src/java/org/apache/commons/lang/mutable/MutableInt.java b/src/java/org/apache/commons/lang/mutable/MutableInt.java
new file mode 100644
index 000000000..39e2ab3ae
--- /dev/null
+++ b/src/java/org/apache/commons/lang/mutable/MutableInt.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.lang.mutable;
+
+import java.io.Serializable;
+
+/**
+ * A mutable int
.
+ *
+ * @since 2.1
+ * @version $Id: MutableInt.java,v 1.1 2004/07/05 22:15:33 scolebourne Exp $
+ */
+public class MutableInt extends Number
+ implements Comparable, Mutable, Serializable {
+
+ /** Serialization lock. */
+ private static final long serialVersionUID = 512176391864L;
+
+ /** The mutable value. */
+ private int value;
+
+ /**
+ * Constructs a new MutableInt with the default value of zero.
+ */
+ public MutableInt() {
+ super();
+ }
+
+ /**
+ * Constructs a new MutableInt with the specified value.
+ *
+ * @param value a value.
+ */
+ public MutableInt(int value) {
+ super();
+ this.value = value;
+ }
+
+ //-----------------------------------------------------------------------
+ public Object getValue() {
+ return new Integer(this.value);
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public void setValue(Object value) {
+ setValue(((Number) value).intValue());
+ }
+
+ //-----------------------------------------------------------------------
+ public int intValue() {
+ return value;
+ }
+
+ public long longValue() {
+ return (long) value;
+ }
+
+ public float floatValue() {
+ return (float) value;
+ }
+
+ public double doubleValue() {
+ return (double) value;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Checks if this object equals the specified object.
+ *
+ * The object must be a MutableInt with the same value to be equal. + * + * @param obj the object to compare to + * @return true if equal + */ + public boolean equals(Object obj) { + if (obj instanceof MutableInt) { + return (value == ((MutableInt) obj).value); + } + return false; + } + + /** + * Returns a suitable hashcode for this mutable. + * + * @return a suitable hashcode + */ + public int hashCode() { + return value; + } + + /** + * Compares this mutable to another in ascending order. + * + * @param obj the mutable to compare to + * @return negative if this is less, zero if equal, positive if greater + */ + public int compareTo(Object obj) { + MutableInt other = (MutableInt) obj; + int anotherVal = other.value; + return (value < anotherVal ? -1 : (value == anotherVal ? 0 : 1)); + } + + /** + * Returns the String value of this mutable. + * + * @return the mutable value as a string + */ + public String toString() { + return String.valueOf(value); + } + +}