Ruby vs Java
该文档包含ruby与java的异同比较
阅读文档,你将了解:
- == 与 equal 的区别
- 重写与重载
Difference between “==” and “equal”
NOTE:
ruby为弱类型语言,java为强类型语言。最基本的区别就是,ruby容忍隐式转换。
ruby中一切皆对象,java中基本类型的不具备对象特性
ruby
ruby: String 类中 ‘==’ 和 ‘equals?’ 方法
NOTE:
“==”比较字符串中所包含的内容是否相同。
“equals()”比较两个变量本身的值,即两个对象在内存中的首地址。
s1 = "axu"
s2 = "axu"
s3 = s2
s1 == s2 # => true
s1.equal? s2 # => false
s3 == s2 # => true
s3.equal? s2 # => true
java
java: 类中 ‘==’ 和 ’equal’ 方法
NOTE:
1. 对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
2. 对于非字符串变量来说,”==”和”equals”方法的作用是相同的都是用来比较其
对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
public class Demo20171122 {
public static void main(String args[]){
String s1, s2;
String s3 = "axu", s4 = "axu";
s1 = new String("axu");
s2 = new String("axu");
StringBuffer s5 = new StringBuffer("axu");
StringBuffer s6 = new StringBuffer("axu");
if(s1 == s2) {
System.out.println("================");
System.out.printf("s1 == s2");
System.out.println("类型:s1:" + s1.getClass().toString() + " \ns2: " + s1.getClass().toString() );
}else{
System.out.println("================");
System.out.println("s1 != s2");
System.out.println("类型:s1:" + s1.getClass().toString() + " \ns2: " + s1.getClass().toString() );
}
if(s3 == s4){
System.out.println("================");
System.out.println("s3 == s4");
System.out.println(s3.getClass().toString());
System.out.println("类型:s3:" + s3.getClass().toString() + " \ns4: " + s4.getClass().toString() );
}else{
System.out.println("================");
System.out.println("s3 != s4");
System.out.println("类型:s3:" + s3.getClass().toString() + " \ns4: " + s4.getClass().toString() );
}
if(s5 == s6) {
System.out.println("================");
System.out.printf("s5 == s6");
System.out.println("类型:s5:" + s5.getClass().toString() + " \ns6: " + s6.getClass().toString() );
}else{
System.out.println("================");
System.out.println("s5 != s6");
System.out.println("类型:s5:" + s5.getClass().toString() + " \ns6: " + s6.getClass().toString() );
}
if(s1.equals(s2)){
System.out.println("================");
System.out.println("s1 equals s2");
System.out.println("地址:s1: " + System.identityHashCode(s1) + " \ns2: " + System.identityHashCode(s2));
}else{
System.out.println("================");
System.out.println("s1 not equals s2");
System.out.println("地址:s1: " + System.identityHashCode(s1) + " \ns2: " + System.identityHashCode(s2));
}
if(s3.equals(s4)){
System.out.println("================");
System.out.println("s3 equals s4");
System.out.println("地址:s3: " + System.identityHashCode(s3) + " \ns4: " + System.identityHashCode(s4));
}else{
System.out.println("================");
System.out.println("s3 not equals s4");
System.out.println("地址:s3: " + System.identityHashCode(s3) + " \ns4: " + System.identityHashCode(s4));
}
if(s5.equals(s6)){
System.out.println("================");
System.out.println("s5 equals s6");
System.out.println("地址:s5: " + System.identityHashCode(s5) + " \ns6: " + System.identityHashCode(s6));
}else{
System.out.println("================");
System.out.println("s5 not equals s6");
System.out.println("地址:s5: " + System.identityHashCode(s5) + " \ns6: " + System.identityHashCode(s6));
}
}
}
输出:
i1 != i2
1625635731
================
s1 != s2
类型:s1:class java.lang.String
s2: class java.lang.String
================
s3 == s4
class java.lang.String
类型:s3:class java.lang.String
s4: class java.lang.String
================
s5 != s6
类型:s5:class java.lang.StringBuffer
s6: class java.lang.StringBuffer
================
s1 equals s2
地址:s1: 1580066828
s2: 491044090
**********************
97054
================
s3 equals s4
地址:s3: 644117698
s4: 644117698
================
s5 not equals s6
地址:s5: 1872034366
s6: 1581781576