在JavaScript中,基本类型都是通过传值操作(复制、传递和比较)的,传值即两份独立的copy;引用类型(对象都是引用类型,数组和函数是特殊的对象类型)是通过传址(对象和数组的值可能会很大,那么传值操作也就没什么意义,因为这样会牵涉到对大量内存低效率的复制和比较)操作的,传址即两个不同的变量名称refer to同一个对象;其中string是个比较特殊的类型,Javascript中字符串是通过传址来复制和传递的,而它们是通过传值来比较的。
<html><head>
<script language="JavaScript">
var s1 = "hello";
var s2 = "hell" + "o";
if(s1 == s2)
document.write("Strings compared by value");
else
document.write("Strings compared by reference");
</script>
</head>
<body></body>
</html>
result:Strings compared by value
再看Java中,
public class StringTest{
public static void main(String args[]){
String s1 = "hello";
String s2 = "hell" + "o";
System.out.println(s1 == s2);
// System.out.println(s1.equals(s2));
}
}
result:true
字符串也是通过传值的。ps.如果new出来的就不相等了
public class StringTest2{
public static void main(String args[]){
String s1 = new String("hello");
String s2 = new String("hell" + "o");
System.out.println(s1 == s2);
// System.out.println(s1.equals(s2));
}
}
result:false
这是,比较的是两个不同的引用,指向不同的内存地址