首先,Java有字符串驻留机制。执行String s4 = “高等“ + ”数学“;这句的时候编译器进行了优化,你可以认为他其实执行的是String s4 = ”高等数学“;由于字符串驻留机制,那么s4会在驻留池里面找到这个字符串(因为s1已经建了这个对象),这样s1和s4就是对同一对象的引用了。s1 == s7为false是因为s7使用了new,new总是会创建对象,不管驻留池中存不存在。所以s1和s7就不是通一个对象了的引用了。s1 == s6为false,是因为s6 = s2 + s3;而s2和s3是变量,编译器不能进行优化(优化是在编译时,如果优化了,运行时s2和s3变了,不就出现错误了么,所以编译器不能进行优化),所以运行时会创建一个新对象。所以s6的引用不等于s1。
字符串缓冲池:程序在运行的时候会创建一个字符串缓冲池。
当使用 String s4 ="高等" +"数学"; 这样的表达是创建字符串的时候,
程序首先会在这个String缓冲池中寻找相同值的对象,
在String s1 = "高等数学";中,s先被放到了池中,所以在str4被创建的时候,程序找到了具有相同值的 s1
并将s4引用s1所引用的对象"高等数学"
参考:ht tp://blo g.csdn.net/jueblog/article/details/9347791
java中编译就就计算出来的字符串内容相同时指向相同的对象内存。
把几个String 的hashCode打印出来看看。
java你用equals啊,用什么双等号啊