好吧,我承认我可能是Out了。String s1="android";
String s2="android";if(s1==s2)
System.out.println("s1==s2");if(s1.equals(s2))
System.out.println("s1.equals(s2)");印象中,无论是书本、视频,还是论坛上讨论起来的时候,都是s1 equals s2;直到今天下午,看一同事写的代码时用了 ==,正想批评他,结果一debug,竟然 if(s1==s2)里边的代码执行了。这是什么情况?是我记得不对,还是语法改了?
String s2="android";if(s1==s2)
System.out.println("s1==s2");if(s1.equals(s2))
System.out.println("s1.equals(s2)");印象中,无论是书本、视频,还是论坛上讨论起来的时候,都是s1 equals s2;直到今天下午,看一同事写的代码时用了 ==,正想批评他,结果一debug,竟然 if(s1==s2)里边的代码执行了。这是什么情况?是我记得不对,还是语法改了?
解决方案 »
- 对字符进行解析
- 原题如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连. 解决思路:强化题目,用1、2、2、3、4、5这六个数字排列“递增”序列。
- 新手问题!求助!
- 呵呵 把自己弄迷糊了 等待来人解决
- 问一个基础性问题?
- 在使用jcreator的时候 怎么样才能把参数传给args的
- JAVAAPPLET绘图时UPDATE重载无效问题,急!
- 各位过来人请介绍一下学习java的有效顺序?
- String的+是不是像c++一样重载运算符?
- JAVA包中的类在系统(只装JBUILDER3)中以何种形式存在?
- 为什么没有大厂商用Java来做大型3D游戏,原因其实很简单。
- 无解java:模拟聊天程序,错误信息java.net.ConnectException: Connection refused: connect
String s2= new String("android");
再试试。
String s2="android";
因为android这个字符串是字符串常量池中,所以s1和s2的地址都是指向一个地方的,所以地址也是相等的
String str2 = "android";
System.out.println(str1==str2); //true
1、编译器先处理String str1 = "android";它会在栈中创建一个变量为str1的引用,然后查找栈中是否有android这个值,如果没找到,就将android存放进来,然后将str1指向android。
2、 接着处理String str2 = "android";在创建完b的引用变量后,因为在栈中已经有android这个值,便将str2直接指向android。这样,就出现了str1与str2同时均指向android的情况
3、使用new String("android")会直接在堆内存中创建新的android值。
这个我知道,不同对象内存地址不一样,==肯定是false。但我纠结的是String s="android";这种写法
栈中如果有,则直接引用已经存在的android,如果不存在,则在栈中生成一份新的android
String s2="android";
明显,android现在已经在栈中存在了,所以s2直接引用栈中的android,所以,无论是==还是equils()都是相等的。
领完楼主还可以试着new 一个android,new出来的对象是在堆中,每次new出来的都是一个新的对象,所以equils()应该是相等的,==就为false了。
所以当LZ写 String s1 = "android" String s2 = "android"的时候,只生成了一个String实例,s1和s2都是引用的同一个"android",所以s1 == s2的结果应该是true(毕竟同一个实例的地址是一样的)。当然,使用equals肯定是true了,毕竟s1和s2的内容也一样。如若你使用String s1 = new String("android"); String s2 = new String("android"); 这是就分别为s1和s2生成了一个实例,故此时使用==的结果是false,而使用equals的结果是true。
实际上,这里生成了三个"android",第一个是"android"常量,另外两个s1和s2分别利用之前的常量生成了两个String实例。我也初学java,能理解LZ的困惑,同事,如果说得不对的地方也忘高人指正。