diff --git a/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java b/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
index 30d1875..a496af1 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java
@@ -147,7 +147,7 @@
         String name = driverCfg.getString(NAME);
         String parentsString = driverCfg.getString(EXTENDS, "");
         List<Driver> parents = Lists.newArrayList();
-        if (!parentsString.equals("")) {
+        if (!"".equals(parentsString)) {
             List<String> parentsNames;
             if (parentsString.contains(",")) {
                 parentsNames = Arrays.asList(parentsString.replace(" ", "").split(","));
diff --git a/core/api/src/test/java/org/onosproject/net/driver/XmlDriverLoaderTest.java b/core/api/src/test/java/org/onosproject/net/driver/XmlDriverLoaderTest.java
index 03f18af..5e26fcb 100644
--- a/core/api/src/test/java/org/onosproject/net/driver/XmlDriverLoaderTest.java
+++ b/core/api/src/test/java/org/onosproject/net/driver/XmlDriverLoaderTest.java
@@ -41,7 +41,7 @@
 
         Iterator<Driver> iterator = provider.getDrivers().iterator();
         Driver driver = iterator.next();
-        if (!driver.name().equals("foo.1")) {
+        if (!"foo.1".equals(driver.name())) {
             driver = iterator.next();
         }
 
@@ -87,7 +87,7 @@
         Driver driver;
         do {
             driver = iterator.next();
-        } while (!driver.name().equals("foo.2"));
+        } while (!"foo.2".equals(driver.name()));
         assertTrue("incorrect multiple behaviour inheritance", driver.hasBehaviour(TestBehaviour.class));
         assertTrue("incorrect multiple behaviour inheritance", driver.hasBehaviour(TestBehaviourTwo.class));
     }
@@ -101,14 +101,14 @@
         Driver driver;
         do {
             driver = iterator.next();
-        } while (!driver.name().equals("foo.2"));
+        } while (!"foo.2".equals(driver.name()));
         assertTrue("incorrect multiple behaviour inheritance", driver.hasBehaviour(TestBehaviour.class));
         Behaviour b2 = driver.createBehaviour(new DefaultDriverHandler(
                                                       new DefaultDriverData(
                                                               driver, DeviceId.deviceId("test_device"))),
                                               TestBehaviour.class);
-        assertTrue("incorrect multiple same behaviour inheritance", b2.getClass()
-                .getSimpleName().equals("TestBehaviourImpl2"));
+        assertTrue("incorrect multiple same behaviour inheritance",
+                   "TestBehaviourImpl2".equals(b2.getClass().getSimpleName()));
         assertTrue("incorrect multiple behaviour inheritance", driver.hasBehaviour(TestBehaviourTwo.class));
     }
 
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
index 250b8bd..44f3b7e 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/TrafficTreatmentCodecTest.java
@@ -114,7 +114,7 @@
             int counter = 0;
             for (int idx = 0; idx < node.size(); idx++) {
                 String type = node.get(idx).get("type").asText();
-                if (!type.equals("METER") && !type.equals("TABLE")) {
+                if (!"METER".equals(type) && !"TABLE".equals(type)) {
                     counter++;
                 }
             }
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
index ce85758..416bbf14 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
@@ -131,7 +131,7 @@
         String metadataUri = System.getProperty("onos.cluster.metadata.uri");
         try {
             String protocol = metadataUri == null ? null : new URL(metadataUri).getProtocol();
-            if (protocol != null && (!protocol.equals("file") && !protocol.equals("http"))) {
+            if (!"file".equals(protocol) && !"http".equals(protocol)) {
                 return getProvider(protocol);
             }
             // file provider supports both "file" and "http" uris
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java b/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
index 6db0365..706e286 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
@@ -166,10 +166,10 @@
     public boolean isAvailable() {
         try {
             URL url = new URL(metadataUrl);
-            if (url.getProtocol().equals("file")) {
+            if ("file".equals(url.getProtocol())) {
                 File file = new File(metadataUrl.replaceFirst("file://", ""));
                 return file.exists();
-            } else if (url.getProtocol().equals("http")) {
+            } else if ("http".equals(url.getProtocol())) {
                 try (InputStream file = url.openStream()) {
                     return true;
                 }
@@ -188,11 +188,11 @@
             URL url = new URL(metadataUrl);
             ClusterMetadata metadata = null;
             long version = 0;
-            if (url.getProtocol().equals("file")) {
+            if ("file".equals(url.getProtocol())) {
                 File file = new File(metadataUrl.replaceFirst("file://", ""));
                 version = file.lastModified();
                 metadata = mapper.readValue(new FileInputStream(file), ClusterMetadata.class);
-            } else if (url.getProtocol().equals("http")) {
+            } else if ("http".equals(url.getProtocol())) {
                 URLConnection conn = url.openConnection();
                 version = conn.getLastModified();
                 metadata = mapper.readValue(conn.getInputStream(), ClusterMetadata.class);
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
index ae9dc16..c36ad62 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
@@ -128,7 +128,7 @@
     public void modified() {
         Set<ConfigProperty> configProperties = cfgService.getProperties(getClass().getCanonicalName());
         for (ConfigProperty property : configProperties) {
-            if (property.name().equals("useRegionForBalanceRoles")) {
+            if ("useRegionForBalanceRoles".equals(property.name())) {
                 useRegionForBalanceRoles = property.asBoolean();
             }
         }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
index e573b87..d727ebe 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedClusterStore.java
@@ -345,7 +345,7 @@
     private void readComponentConfiguration() {
         Set<ConfigProperty> configProperties = cfgService.getProperties(getClass().getName());
         for (ConfigProperty property : configProperties) {
-            if (property.name().equals("heartbeatInterval")) {
+            if ("heartbeatInterval".equals(property.name())) {
                 String s = property.value();
                 if (s == null) {
                     setHeartbeatInterval(DEFAULT_HEARTBEAT_INTERVAL);
@@ -362,7 +362,7 @@
                             heartbeatInterval);
                 }
             }
-            if (property.name().equals("phiFailureThreshold")) {
+            if ("phiFailureThreshold".equals(property.name())) {
                 String s = property.value();
                 if (s == null) {
                     setPhiFailureThreshold(DEFAULT_PHI_FAILURE_THRESHOLD);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/ECDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/ECDeviceStore.java
index 5776515..6aa9733 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/ECDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/ECDeviceStore.java
@@ -287,7 +287,7 @@
         } else {
             // Only forward for ConfigProvider
             // Forwarding was added as a workaround for ONOS-490
-            if (!providerId.scheme().equals("cfg")) {
+            if (!"cfg".equals(providerId.scheme())) {
                 return null;
             }
             DeviceInjectedEvent deviceInjectedEvent = new DeviceInjectedEvent(providerId, deviceId, deviceDescription);
@@ -424,7 +424,7 @@
         } else {
             // Only forward for ConfigProvider
             // Forwarding was added as a workaround for ONOS-490
-            if (!providerId.scheme().equals("cfg")) {
+            if (!"cfg".equals(providerId.scheme())) {
                 return Collections.emptyList();
             }
             if (master == null) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 95db702..33f131e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -338,7 +338,7 @@
         } else {
             // Only forward for ConfigProvider
             // Forwarding was added as a workaround for ONOS-490
-            if (!providerId.scheme().equals("cfg")) {
+            if (!"cfg".equals(providerId.scheme())) {
                 return null;
             }
             // FIXME Temporary hack for NPE (ONOS-1171).
@@ -632,7 +632,7 @@
         } else {
             // Only forward for ConfigProvider
             // Forwarding was added as a workaround for ONOS-490
-            if (!providerId.scheme().equals("cfg")) {
+            if (!"cfg".equals(providerId.scheme())) {
                 return Collections.emptyList();
             }
             // FIXME Temporary hack for NPE (ONOS-1171).
diff --git a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
index 2240eb4..d6131da 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
@@ -263,7 +263,7 @@
         } else {
             // Only forward for ConfigProvider or NullProvider
             // Forwarding was added as a workaround for ONOS-490
-            if (!providerId.scheme().equals("cfg") && !providerId.scheme().equals("null")) {
+            if (!"cfg".equals(providerId.scheme()) && !"null".equals(providerId.scheme())) {
                 return null;
             }
             // Temporary hack for NPE (ONOS-1171).
