diff --git a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/Util.java b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/Util.java
index defc4c1..e22d462 100644
--- a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/Util.java
+++ b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/Util.java
@@ -10,8 +10,10 @@
  *******************************************************************************/
 package org.eclipse.e4.ui.bindings.internal;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.MissingResourceException;
+import java.util.Objects;
 import java.util.ResourceBundle;
 import org.eclipse.swt.SWT;
 
@@ -224,7 +226,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[l - i - 1], right[r - i - 1])) {
+			if (!Objects.equals(left[l - i - 1], right[r - i - 1])) {
 				return false;
 			}
 		}
@@ -233,56 +235,39 @@
 	}
 
 	/**
-	 * Checks whether the two objects are <code>null</code> -- allowing for <code>null</code>.
+	 * Checks whether the two objects are <code>null</code> -- allowing for
+	 * <code>null</code>.
 	 *
 	 * @param left
 	 *            The left object to compare; may be <code>null</code>.
 	 * @param right
 	 *            The right object to compare; may be <code>null</code>.
-	 * @return <code>true</code> if the two objects are equivalent; <code>false</code> otherwise.
+	 * @return <code>true</code> if the two objects are equivalent;
+	 *         <code>false</code> otherwise.
+	 * @deprecated Use {@link Objects#equals(Object, Object)}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object left, final Object right) {
 		return left == null ? right == null : ((right != null) && left.equals(right));
 	}
 
 	/**
-	 * Tests whether two arrays of objects are equal to each other. The arrays must not be
-	 * <code>null</code>, but their elements may be <code>null</code>.
+	 * Tests whether two arrays of objects are equal to each other. The arrays must
+	 * not be <code>null</code>, but their elements may be <code>null</code>.
 	 *
 	 * @param leftArray
-	 *            The left array to compare; may be <code>null</code>, and may be empty and may
-	 *            contain <code>null</code> elements.
+	 *            The left array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
 	 * @param rightArray
-	 *            The right array to compare; may be <code>null</code>, and may be empty and may
-	 *            contain <code>null</code> elements.
-	 * @return <code>true</code> if the arrays are equal length and the elements at the same
-	 *         position are equal; <code>false</code> otherwise.
+	 *            The right array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
+	 * @return <code>true</code> if the arrays are equal length and the elements at
+	 *         the same position are equal; <code>false</code> otherwise.
+	 * @deprecated Use {@link Arrays#equals(Object[], Object[])}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object[] leftArray, final Object[] rightArray) {
-		if (leftArray == rightArray) {
-			return true;
-		}
-
-		if (leftArray == null) {
-			return (rightArray == null);
-		} else if (rightArray == null) {
-			return false;
-		}
-
-		if (leftArray.length != rightArray.length) {
-			return false;
-		}
-
-		for (int i = 0; i < leftArray.length; i++) {
-			final Object left = leftArray[i];
-			final Object right = rightArray[i];
-			final boolean equal = (left == null) ? (right == null) : (left.equals(right));
-			if (!equal) {
-				return false;
-			}
-		}
-
-		return true;
+		return Arrays.equals(leftArray, rightArray);
 	}
 
 	/**
@@ -358,7 +343,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[i], right[i])) {
+			if (!Objects.equals(left[i], right[i])) {
 				return false;
 			}
 		}
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ContributionsAnalyzer.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ContributionsAnalyzer.java
index 44db165..d665c44 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ContributionsAnalyzer.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ContributionsAnalyzer.java
@@ -20,6 +20,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 import org.eclipse.core.expressions.EvaluationResult;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.ExpressionInfo;
@@ -511,9 +512,9 @@
 			Key other = (Key) obj;
 			Object exp1 = vexp == null ? null : vexp.getCoreExpression();
 			Object exp2 = other.vexp == null ? null : other.vexp.getCoreExpression();
-			return Util.equals(parentId, other.parentId) && Util.equals(position, other.position)
-					&& getSchemeTag() == other.getSchemeTag() && Util.equals(exp1, exp2)
-					&& Util.equals(factory, other.factory);
+			return Objects.equals(parentId, other.parentId) && Objects.equals(position, other.position)
+					&& getSchemeTag() == other.getSchemeTag() && Objects.equals(exp1, exp2)
+					&& Objects.equals(factory, other.factory);
 		}
 
 		@Override
@@ -732,7 +733,7 @@
 
 	private static boolean containsMatching(List<MMenuElement> children, MMenuElement me) {
 		for (MMenuElement element : children) {
-			if (Util.equals(me.getElementId(), element.getElementId())
+			if (Objects.equals(me.getElementId(), element.getElementId())
 					&& element.getClass().isInstance(me)
 					&& (element instanceof MMenuSeparator || element instanceof MMenu)) {
 				return true;
@@ -743,7 +744,7 @@
 
 	private static boolean containsMatching(List<MToolBarElement> children, MToolBarElement me) {
 		for (MToolBarElement element : children) {
-			if (Util.equals(me.getElementId(), element.getElementId())
+			if (Objects.equals(me.getElementId(), element.getElementId())
 					&& element.getClass().isInstance(me)
 					&& (element instanceof MToolBarSeparator || element instanceof MToolBar)) {
 				return true;
@@ -754,7 +755,7 @@
 
 	private static boolean containsMatching(List<MTrimElement> children, MTrimElement me) {
 		for (MTrimElement element : children) {
-			if (Util.equals(me.getElementId(), element.getElementId())
+			if (Objects.equals(me.getElementId(), element.getElementId())
 					&& element.getClass().isInstance(me)
 					&& (element instanceof MToolBarSeparator || element instanceof MToolBar)) {
 				return true;
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Parameter.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Parameter.java
index 2efac0a..347bd02 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Parameter.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Parameter.java
@@ -12,6 +12,7 @@
 
 import java.util.Collections;
 import java.util.Map;
+import java.util.Objects;
 import org.eclipse.core.commands.IParameter;
 import org.eclipse.core.commands.IParameterValues;
 import org.eclipse.core.commands.ITypedParameter;
@@ -151,17 +152,17 @@
 		}
 
 		final Parameter parameter = (Parameter) object;
-		if (!Util.equals(id, parameter.id)) {
+		if (!Objects.equals(id, parameter.id)) {
 			return false;
 		}
-		if (!Util.equals(name, parameter.name)) {
+		if (!Objects.equals(name, parameter.name)) {
 			return false;
 		}
-		if (!Util.equals(values, parameter.values)) {
+		if (!Objects.equals(values, parameter.values)) {
 			return false;
 		}
 
-		return Util.equals(optional, parameter.optional);
+		return Objects.equals(optional, parameter.optional);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Util.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Util.java
index 1caa928..38d448a 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Util.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/Util.java
@@ -10,9 +10,11 @@
  *******************************************************************************/
 package org.eclipse.e4.ui.internal.workbench;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.MissingResourceException;
+import java.util.Objects;
 import java.util.ResourceBundle;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -228,7 +230,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[l - i - 1], right[r - i - 1])) {
+			if (!Objects.equals(left[l - i - 1], right[r - i - 1])) {
 				return false;
 			}
 		}
@@ -237,56 +239,39 @@
 	}
 
 	/**
-	 * Checks whether the two objects are <code>null</code> -- allowing for <code>null</code>.
+	 * Checks whether the two objects are <code>null</code> -- allowing for
+	 * <code>null</code>.
 	 *
 	 * @param left
 	 *            The left object to compare; may be <code>null</code>.
 	 * @param right
 	 *            The right object to compare; may be <code>null</code>.
-	 * @return <code>true</code> if the two objects are equivalent; <code>false</code> otherwise.
+	 * @return <code>true</code> if the two objects are equivalent;
+	 *         <code>false</code> otherwise.
+	 * @deprecated Use {@link Objects#equals(Object, Object)}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object left, final Object right) {
 		return left == null ? right == null : ((right != null) && left.equals(right));
 	}
 
 	/**
-	 * Tests whether two arrays of objects are equal to each other. The arrays must not be
-	 * <code>null</code>, but their elements may be <code>null</code>.
+	 * Tests whether two arrays of objects are equal to each other. The arrays must
+	 * not be <code>null</code>, but their elements may be <code>null</code>.
 	 *
 	 * @param leftArray
-	 *            The left array to compare; may be <code>null</code>, and may be empty and may
-	 *            contain <code>null</code> elements.
+	 *            The left array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
 	 * @param rightArray
-	 *            The right array to compare; may be <code>null</code>, and may be empty and may
-	 *            contain <code>null</code> elements.
-	 * @return <code>true</code> if the arrays are equal length and the elements at the same
-	 *         position are equal; <code>false</code> otherwise.
+	 *            The right array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
+	 * @return <code>true</code> if the arrays are equal length and the elements at
+	 *         the same position are equal; <code>false</code> otherwise.
+	 * @deprecated Use {@link Arrays#equals(Object[], Object[])}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object[] leftArray, final Object[] rightArray) {
-		if (leftArray == rightArray) {
-			return true;
-		}
-
-		if (leftArray == null) {
-			return (rightArray == null);
-		} else if (rightArray == null) {
-			return false;
-		}
-
-		if (leftArray.length != rightArray.length) {
-			return false;
-		}
-
-		for (int i = 0; i < leftArray.length; i++) {
-			final Object left = leftArray[i];
-			final Object right = rightArray[i];
-			final boolean equal = (left == null) ? (right == null) : (left.equals(right));
-			if (!equal) {
-				return false;
-			}
-		}
-
-		return true;
+		return Arrays.equals(leftArray, rightArray);
 	}
 
 	/**
@@ -362,7 +347,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[i], right[i])) {
+			if (!Objects.equals(left[i], right[i])) {
 				return false;
 			}
 		}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
index be2cf29..12aff2f 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ObservableCollectionTreeContentProvider.java
@@ -18,6 +18,7 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.core.databinding.observable.IObservable;
@@ -33,7 +34,6 @@
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.databinding.viewers.TreeStructureAdvisor;
-import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.IElementComparer;
@@ -410,7 +410,7 @@
 
 	protected boolean equal(Object left, Object right) {
 		if (comparer == null)
-			return Util.equals(left, right);
+			return Objects.equals(left, right);
 		return comparer.equals(left, right);
 	}
 
@@ -486,7 +486,7 @@
 					children = Observables.emptyObservableSet(realm);
 				} else {
 					Assert
-							.isTrue(Util.equals(realm, children.getRealm()),
+							.isTrue(Objects.equals(realm, children.getRealm()),
 									"Children observable collection must be on the Display realm"); //$NON-NLS-1$
 					listener = createCollectionChangeListener(element);
 					addCollectionChangeListener(children, listener);
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
index d7a4787..fc10641 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
@@ -12,7 +12,8 @@
 
 package org.eclipse.jface.internal.databinding.viewers;
 
-import org.eclipse.jface.util.Util;
+import java.util.Objects;
+
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.IElementComparer;
 import org.eclipse.jface.viewers.ITreeSelection;
@@ -178,7 +179,7 @@
 	}
 
 	private boolean eq(IElementComparer comparer, Object o1, Object o2) {
-		return comparer == null ? Util.equals(o1, o2) : comparer.equals(o1, o2);
+		return comparer == null ? Objects.equals(o1, o2) : comparer.equals(o1, o2);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
index 9198d33..a909c00 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerElementMap.java
@@ -17,10 +17,10 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.IElementComparer;
 import org.eclipse.jface.viewers.StructuredViewer;
 
@@ -162,7 +162,7 @@
 								Map.Entry that = (Map.Entry) obj;
 								return comparer.equals(this.getKey(), that
 										.getKey())
-										&& Util.equals(this.getValue(), that
+										&& Objects.equals(this.getValue(), that
 												.getValue());
 							}
 
@@ -208,8 +208,8 @@
 						if (obj == null || !(obj instanceof Map.Entry))
 							return false;
 						Map.Entry that = (Map.Entry) obj;
-						return Util.equals(wrappedKey, that.getKey())
-								&& Util
+						return Objects.equals(wrappedKey, that.getKey())
+								&& Objects
 										.equals(this.getValue(), that
 												.getValue());
 					}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
index 402e1f1..eb48265 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/ViewerUpdater.java
@@ -15,10 +15,10 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jface.databinding.viewers.IViewerUpdater;
-import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.IElementComparer;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -86,7 +86,7 @@
 			IElementComparer comparer = viewer.getComparer();
 			for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
 				Object selectionElement = iter.next();
-				if (comparer == null ? Util.equals(element, selectionElement)
+				if (comparer == null ? Objects.equals(element, selectionElement)
 						: comparer.equals(element, selectionElement)) {
 					return Optional.of(iter);
 				}
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java
index a7b3f77..aa96ff8 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Binding.java
@@ -13,6 +13,7 @@
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.StringWriter;
+import java.util.Objects;
 
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.jface.util.Util;
@@ -216,17 +217,17 @@
 	 */
 	final boolean deletes(final Binding binding) {
 		boolean deletes = true;
-		deletes &= Util.equals(getContextId(), binding.getContextId());
-		deletes &= Util.equals(getTriggerSequence(), binding
+		deletes &= Objects.equals(getContextId(), binding.getContextId());
+		deletes &= Objects.equals(getTriggerSequence(), binding
 				.getTriggerSequence());
 		if (getLocale() != null) {
-			deletes &= !Util.equals(getLocale(), binding.getLocale());
+			deletes &= !Objects.equals(getLocale(), binding.getLocale());
 		}
 		if (getPlatform() != null) {
-			deletes &= !Util.equals(getPlatform(), binding.getPlatform());
+			deletes &= !Objects.equals(getPlatform(), binding.getPlatform());
 		}
 		deletes &= (binding.getType() == SYSTEM);
-		deletes &= Util.equals(getParameterizedCommand(), null);
+		deletes &= Objects.equals(getParameterizedCommand(), null);
 
 		return deletes;
 	}
@@ -251,23 +252,23 @@
 		}
 
 		final Binding binding = (Binding) object;
-		if (!Util.equals(getParameterizedCommand(), binding
+		if (!Objects.equals(getParameterizedCommand(), binding
 				.getParameterizedCommand())) {
 			return false;
 		}
-		if (!Util.equals(getContextId(), binding.getContextId())) {
+		if (!Objects.equals(getContextId(), binding.getContextId())) {
 			return false;
 		}
-		if (!Util.equals(getTriggerSequence(), binding.getTriggerSequence())) {
+		if (!Objects.equals(getTriggerSequence(), binding.getTriggerSequence())) {
 			return false;
 		}
-		if (!Util.equals(getLocale(), binding.getLocale())) {
+		if (!Objects.equals(getLocale(), binding.getLocale())) {
 			return false;
 		}
-		if (!Util.equals(getPlatform(), binding.getPlatform())) {
+		if (!Objects.equals(getPlatform(), binding.getPlatform())) {
 			return false;
 		}
-		if (!Util.equals(getSchemeId(), binding.getSchemeId())) {
+		if (!Objects.equals(getSchemeId(), binding.getSchemeId())) {
 			return false;
 		}
 		return (getType() == binding.getType());
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
index 21702dd..6ab6b88 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManager.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.StringTokenizer;
 
@@ -550,7 +551,7 @@
 			found = false;
 			if (activeSchemeIds != null) {
 				for (String activeSchemeId : activeSchemeIds) {
-					if (Util.equals(schemeId, activeSchemeId)) {
+					if (Objects.equals(schemeId, activeSchemeId)) {
 						found = true;
 						break;
 					}
@@ -1300,7 +1301,7 @@
 			if ((bestLocale == null) && (currentLocale != null)) {
 				bestBinding = currentBinding;
 			}
-			if (!(Util.equals(bestLocale, currentLocale))) {
+			if (!(Objects.equals(bestLocale, currentLocale))) {
 				continue;
 			}
 
@@ -1313,7 +1314,7 @@
 			if ((bestPlatform == null) && (currentPlatform != null)) {
 				bestBinding = currentBinding;
 			}
-			if (!(Util.equals(bestPlatform, currentPlatform))) {
+			if (!(Objects.equals(bestPlatform, currentPlatform))) {
 				continue;
 			}
 
@@ -1648,7 +1649,7 @@
 		}
 
 		for (String localString : locales) {
-			if (Util.equals(localString, locale)) {
+			if (Objects.equals(localString, locale)) {
 				matches = true;
 				break;
 			}
@@ -1681,7 +1682,7 @@
 		}
 
 		for (String platformString : platforms) {
-			if (Util.equals(platformString, platform)) {
+			if (Objects.equals(platformString, platform)) {
 				matches = true;
 				break;
 			}
@@ -1861,11 +1862,11 @@
 		for (int i = 0; i < bindingCount; i++) {
 			final Binding binding = bindings[i];
 			boolean equals = true;
-			equals &= Util.equals(sequence, binding.getTriggerSequence());
-			equals &= Util.equals(schemeId, binding.getSchemeId());
-			equals &= Util.equals(contextId, binding.getContextId());
-			equals &= Util.equals(locale, binding.getLocale());
-			equals &= Util.equals(platform, binding.getPlatform());
+			equals &= Objects.equals(sequence, binding.getTriggerSequence());
+			equals &= Objects.equals(schemeId, binding.getSchemeId());
+			equals &= Objects.equals(contextId, binding.getContextId());
+			equals &= Objects.equals(locale, binding.getLocale());
+			equals &= Objects.equals(platform, binding.getPlatform());
 			equals &= (type == binding.getType());
 			if (equals) {
 				bindingsChanged = true;
@@ -2238,7 +2239,7 @@
 							+ scheme.getId());
 		}
 
-		if (Util.equals(activeScheme, scheme)) {
+		if (Objects.equals(activeScheme, scheme)) {
 			return;
 		}
 
@@ -2315,7 +2316,7 @@
 			throw new NullPointerException("The locale cannot be null"); //$NON-NLS-1$
 		}
 
-		if (!Util.equals(this.locale, locale)) {
+		if (!Objects.equals(this.locale, locale)) {
 			this.locale = locale;
 			this.locales = expand(locale, LOCALE_SEPARATOR);
 			clearSolution();
@@ -2346,7 +2347,7 @@
 			throw new NullPointerException("The platform cannot be null"); //$NON-NLS-1$
 		}
 
-		if (!Util.equals(this.platform, platform)) {
+		if (!Objects.equals(this.platform, platform)) {
 			this.platform = platform;
 			this.platforms = expand(platform, Util.ZERO_LENGTH_STRING);
 			clearSolution();
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManagerEvent.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManagerEvent.java
index dd9cb1e..ad3d666 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManagerEvent.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/BindingManagerEvent.java
@@ -11,12 +11,12 @@
 
 package org.eclipse.jface.bindings;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
 
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.AbstractBitSetEvent;
-import org.eclipse.jface.util.Util;
 
 /**
  * An instance of this class describes changes to an instance of
@@ -197,7 +197,7 @@
 			previousBindings = EMTPY_SEQUENCE;
 		}
 
-		return !Util.equals(currentBindings, previousBindings);
+		return !Arrays.equals(currentBindings, previousBindings);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/CachedBindingSet.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/CachedBindingSet.java
index 3e1bbb6..c70e2f3 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/CachedBindingSet.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/CachedBindingSet.java
@@ -10,8 +10,10 @@
  *******************************************************************************/
 package org.eclipse.jface.bindings;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Objects;
 
 import org.eclipse.core.commands.util.Tracing;
 import org.eclipse.jface.util.Util;
@@ -218,16 +220,16 @@
 
 		final CachedBindingSet other = (CachedBindingSet) object;
 
-		if (!Util.equals(activeContextTree, other.activeContextTree)) {
+		if (!Objects.equals(activeContextTree, other.activeContextTree)) {
 			return false;
 		}
-		if (!Util.equals(locales, other.locales)) {
+		if (!Arrays.equals(locales, other.locales)) {
 			return false;
 		}
-		if (!Util.equals(platforms, other.platforms)) {
+		if (!Arrays.equals(platforms, other.platforms)) {
 			return false;
 		}
-		return Util.equals(schemeIds, other.schemeIds);
+		return Arrays.equals(schemeIds, other.schemeIds);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Scheme.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Scheme.java
index f5ac95c..a808fcf 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Scheme.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/Scheme.java
@@ -13,6 +13,7 @@
 
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.core.commands.common.NamedHandleObject;
@@ -143,14 +144,14 @@
         final boolean definedChanged = !this.defined;
         this.defined = true;
 
-        final boolean nameChanged = !Util.equals(this.name, name);
+		final boolean nameChanged = !Objects.equals(this.name, name);
         this.name = name;
 
-        final boolean descriptionChanged = !Util.equals(this.description,
+		final boolean descriptionChanged = !Objects.equals(this.description,
                 description);
         this.description = description;
 
-        final boolean parentIdChanged = !Util.equals(this.parentId, parentId);
+		final boolean parentIdChanged = !Objects.equals(this.parentId, parentId);
         this.parentId = parentId;
 
         fireSchemeChanged(new SchemeEvent(this, definedChanged, nameChanged,
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java
index 95be30b..ba5b523 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/bindings/TriggerSequence.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.jface.bindings;
 
+import java.util.Arrays;
+
 import org.eclipse.jface.util.Util;
 
 /**
@@ -112,7 +114,7 @@
 		}
 
 		final TriggerSequence triggerSequence = (TriggerSequence) object;
-		return Util.equals(triggers, triggerSequence.triggers);
+		return Arrays.equals(triggers, triggerSequence.triggers);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/Util.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/Util.java
index e6a2550..313d2cc 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/Util.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/Util.java
@@ -11,9 +11,11 @@
 
 package org.eclipse.jface.util;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.MissingResourceException;
+import java.util.Objects;
 import java.util.ResourceBundle;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -241,7 +243,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[l - i - 1], right[r - i - 1])) {
+			if (!Objects.equals(left[l - i - 1], right[r - i - 1])) {
 				return false;
 			}
 		}
@@ -259,54 +261,31 @@
 	 *            The right object to compare; may be <code>null</code>.
 	 * @return <code>true</code> if the two objects are equivalent;
 	 *         <code>false</code> otherwise.
+	 * @deprecated Use {@link Objects#equals(Object, Object)}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object left, final Object right) {
-		return left == null ? right == null : ((right != null) && left
-				.equals(right));
+		return Objects.equals(left, right);
 	}
 
 	/**
-	 * Tests whether two arrays of objects are equal to each other. The arrays
-	 * must not be <code>null</code>, but their elements may be
-	 * <code>null</code>.
+	 * Tests whether two arrays of objects are equal to each other. The arrays must
+	 * not be <code>null</code>, but their elements may be <code>null</code>.
 	 *
 	 * @param leftArray
-	 *            The left array to compare; may be <code>null</code>, and
-	 *            may be empty and may contain <code>null</code> elements.
+	 *            The left array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
 	 * @param rightArray
-	 *            The right array to compare; may be <code>null</code>, and
-	 *            may be empty and may contain <code>null</code> elements.
-	 * @return <code>true</code> if the arrays are equal length and the
-	 *         elements at the same position are equal; <code>false</code>
-	 *         otherwise.
+	 *            The right array to compare; may be <code>null</code>, and may be
+	 *            empty and may contain <code>null</code> elements.
+	 * @return <code>true</code> if the arrays are equal length and the elements at
+	 *         the same position are equal; <code>false</code> otherwise.
+	 * @deprecated Use {@link Arrays#equals(Object[], Object[])}
 	 */
+	@Deprecated
 	public static final boolean equals(final Object[] leftArray,
 			final Object[] rightArray) {
-		if (leftArray == rightArray) {
-			return true;
-		}
-
-		if (leftArray == null) {
-			return (rightArray == null);
-		} else if (rightArray == null) {
-			return false;
-		}
-
-		if (leftArray.length != rightArray.length) {
-			return false;
-		}
-
-		for (int i = 0; i < leftArray.length; i++) {
-			final Object left = leftArray[i];
-			final Object right = rightArray[i];
-			final boolean equal = (left == null) ? (right == null) : (left
-					.equals(right));
-			if (!equal) {
-				return false;
-			}
-		}
-
-		return true;
+		return Arrays.equals(leftArray, rightArray);
 	}
 
 	/**
@@ -385,7 +364,7 @@
 		}
 
 		for (int i = 0; i < r; i++) {
-			if (!equals(left[i], right[i])) {
+			if (!Objects.equals(left[i], right[i])) {
 				return false;
 			}
 		}
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeNode.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeNode.java
index 403c3e2..c781516 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeNode.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeNode.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.jface.viewers;
 
+import java.util.Objects;
+
 import org.eclipse.jface.util.Util;
 
 /**
@@ -59,7 +61,7 @@
 	@Override
 	public boolean equals(final Object object) {
 		if (object instanceof TreeNode) {
-			return Util.equals(this.value, ((TreeNode) object).value);
+			return Objects.equals(this.value, ((TreeNode) object).value);
 		}
 
 		return false;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
index 6aa8fbd..9ee5cc0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
@@ -21,13 +21,13 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ISelection;
@@ -621,7 +621,7 @@
 				Iterator<MarkerFieldFilterGroup> filterGroupIterator = filterGroups.iterator();
 				while (filterGroupIterator.hasNext()) {
 					MarkerFieldFilterGroup group = filterGroupIterator.next();
-					if (Util.equals(group.getName(), selectedElementName)) {
+					if (Objects.equals(group.getName(), selectedElementName)) {
 						selectedElements.add(group);
 						break;
 					}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
index 9c17d64..07c3f25 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
@@ -20,6 +20,7 @@
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -36,7 +37,6 @@
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.DecoratingLabelProvider;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.ILabelDecorator;
@@ -1367,7 +1367,7 @@
 	 * @since 3.2
 	 */
 	private boolean internalSetWorkingSet(IWorkingSet workingSet) {
-		boolean refreshNeeded = !Util.equals(this.workingSet, workingSet);
+		boolean refreshNeeded = !Objects.equals(this.workingSet, workingSet);
 		this.workingSet = workingSet;
 		emptyWorkingSet = workingSet != null && workingSet.isAggregateWorkingSet()
 				&& workingSet.isEmpty();
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CommandLegacyActionWrapper.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CommandLegacyActionWrapper.java
index 2246440..284b5a3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CommandLegacyActionWrapper.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CommandLegacyActionWrapper.java
@@ -12,6 +12,7 @@
 
 package org.eclipse.ui.internal.handlers;
 
+import java.util.Objects;
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.CommandEvent;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -33,7 +34,6 @@
 import org.eclipse.jface.menus.IMenuStateIds;
 import org.eclipse.jface.menus.TextState;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.util.Util;
 import org.eclipse.swt.events.HelpListener;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.ui.commands.ICommandImageService;
@@ -396,7 +396,7 @@
 			}
 		}
 
-		if (!Util.equals(oldDescription, newDescription)) {
+		if (!Objects.equals(oldDescription, newDescription)) {
 			firePropertyChange(IAction.DESCRIPTION, oldDescription,
 					newDescription);
 			firePropertyChange(IAction.TOOL_TIP_TEXT, oldDescription,
@@ -419,20 +419,20 @@
 			}
 		}
 
-		if (!Util.equals(oldDefaultImage, newDefaultImage)) {
+		if (!Objects.equals(oldDefaultImage, newDefaultImage)) {
 			firePropertyChange(IAction.IMAGE, oldDefaultImage, newDefaultImage);
 		}
 
-		if (!Util.equals(oldDisabledImage, newDisabledImage)) {
+		if (!Objects.equals(oldDisabledImage, newDisabledImage)) {
 			firePropertyChange(IAction.IMAGE, oldDisabledImage,
 					newDisabledImage);
 		}
 
-		if (!Util.equals(oldHoverImage, newHoverImage)) {
+		if (!Objects.equals(oldHoverImage, newHoverImage)) {
 			firePropertyChange(IAction.IMAGE, oldHoverImage, newHoverImage);
 		}
 
-		if (!Util.equals(oldText, newText)) {
+		if (!Objects.equals(oldText, newText)) {
 			firePropertyChange(IAction.TEXT, oldText, newText);
 		}
 	}
@@ -458,7 +458,7 @@
 				INamedHandleStateIds.DESCRIPTION);
 		if (state instanceof TextState) {
 			final String currentValue = (String) state.getValue();
-			if (!Util.equals(text, currentValue)) {
+			if (!Objects.equals(text, currentValue)) {
 				state.setValue(text);
 			}
 		}
@@ -533,7 +533,7 @@
 				INamedHandleStateIds.NAME);
 		if (state instanceof TextState) {
 			final String currentValue = (String) state.getValue();
-			if (!Util.equals(text, currentValue)) {
+			if (!Objects.equals(text, currentValue)) {
 				state.setValue(text);
 			}
 		}
