diff --git a/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java b/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java index d9b6dc1fe4..552395f050 100644 --- a/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/ClassPathResource.java @@ -286,7 +286,7 @@ public class ClassPathResource extends AbstractFileResolvingResource { */ @Override public int hashCode() { - return this.path.hashCode(); + return this.absolutePath.hashCode(); } } diff --git a/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java b/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java index 3da376ab8f..cef6a34f05 100644 --- a/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/ClassPathResourceTests.java @@ -90,6 +90,14 @@ class ClassPathResourceTests { assertThat(resource2).isEqualTo(resource1); } + @Test + void resourcesWithEquivalentAbsolutePathsHaveSameHashCode() { + ClassPathResource resource1 = new ClassPathResource("Resource.class", getClass()); + ClassPathResource resource2 = new ClassPathResource("org/springframework/core/io/Resource.class", getClass().getClassLoader()); + assertThat(resource1.getPath()).isEqualTo(resource2.getPath()); + assertThat(resource1).hasSameHashCodeAs(resource2); + } + @Test void resourcesWithEquivalentAbsolutePathsFromDifferentClassLoadersAreNotEqual() { class SimpleThrowawayClassLoader extends OverridingClassLoader {