Android的数据库数据问题 我用简单的代码试过,将str1和str2都设为张三,但是既能执行循环里面,也能执行else语句 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你输出的str1确定是“张三”吗?是以log的形式输出的吗? 字符串用equals试试看吧, 如果类型相同的话 ==号比较的内存地址是否相等,equals是比较两个内存中的内容相等str1和str2是两个不同的内存地址用‘==’肯定是不相等的;你吧str2=‘张三’改为str2=str1;或者用equals代替‘==’号 字符比较用equals , java的基本功啊 equals吧 JAVA代码里面用的比较多 把JAVA基础看一下吧。JAVA中符串比较是这样的:str2.equals(str1) ,返回真或假。 因为String是个类,不是常量。每个类有自己的Hash码,它所驻的内存地址是不一样的,所以不能用“==”。 J2SE不过关了吧"=="一般是比较内存地址是否相同,equals比的是文本内容是否相同比如:String str = "123";String s1 = str;String s2 = new String("123");此时str == s2 , 返回为false;str == s1,返回为true;而str.equals(s2); 返回为true String 是引用类型的,判断引用类型的相等只能用equals, 如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true 如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true 首先String str1="aaaa"; 此时虚拟机会创建一个变量str1,并且查找有没有已经存在的常量"aaaa",如果有str1就引用此常量,如果没有则创建一个"aaaa"常量,然后让str1去引用。由于此前没有创建过"aaaa",所以此时创建"aaaa"。String str2="aaaa";按照上面的思路,虚拟机不会再创建"aaaa",而只创建str2,然后让str2直接费用str1正在引用的"aaaa",所以,str1和str2都同时引用的一个存储地址,所以这时可以直接用“==”去判断且为真,但有且只有这种情况才成立。所以平时做字符串字符判断时不要用“==”。 再给你说一个例子:String str1="aaaa";String str2=new Sting("aaaa");此时的str1==str2会返回false。因为str2是引用的一个新的String对象new String("aaaa"),而不是去引用"aaaa"。 既然Android是基于JDK的,那么你就必须遵循JAVA规范以及了解JAVA虚拟机内存分配。否则你的程序是不可能在JDK环境下运行成功的。 如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true这个是肯定的,这个涉及地址池概念,str1="aaa";和str2="aaa"实际上有个地址池,里面有"aaa"的地址,然后你赋值给str1和str2时都先会进入池去看看是否有这个内容如果有则赋予值,没有再new所以str1="aaa" 和str2="aaa";其地址相同。 关于android 手机的camera问题 android入门,发现一个问题,终于解决 如何只查看自己的log信息呢? 在sygwin下使用android ndk编译自带的例子,使用nm无法查看 android环境构建时出现的问题 制作音乐播放器的问题。 安卓安装一个apk时如何把其他几个apk也装上 bitmap转9patch图片出错 Android 如何在EditText 中嵌入默认图片和文字? 求助,添加searchview的监听器后程序停止运行,在线等 使用豆瓣API时的问题。 android sharedpreferneces数据共享,外部应用只能读,不能写
str1和str2是两个不同的内存地址用‘==’肯定是不相等的;你吧str2=‘张三’改为str2=str1;
或者用equals代替‘==’号
JAVA中符串比较是这样的:str2.equals(str1) ,返回真或假。
"=="一般是比较内存地址是否相同,
equals比的是文本内容是否相同
比如:
String str = "123";
String s1 = str;
String s2 = new String("123");此时str == s2 , 返回为false;
str == s1,返回为true;
而str.equals(s2); 返回为true
首先String str1="aaaa";
此时虚拟机会创建一个变量str1,并且查找有没有已经存在的常量"aaaa",如果有str1就引用此常量,如果没有则创建一个"aaaa"常量,然后让str1去引用。由于此前没有创建过"aaaa",所以此时创建"aaaa"。
String str2="aaaa";
按照上面的思路,虚拟机不会再创建"aaaa",而只创建str2,然后让str2直接费用str1正在引用的"aaaa",
所以,str1和str2都同时引用的一个存储地址,所以这时可以直接用“==”去判断且为真,但有且只有这种情况才成立。所以平时做字符串字符判断时不要用“==”。
String str2=new Sting("aaaa");此时的str1==str2会返回false。因为str2是引用的一个新的String对象new String("aaaa"),而不是去引用"aaaa"。
否则你的程序是不可能在JDK环境下运行成功的。
如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true这个是肯定的,这个涉及地址池概念,
str1="aaa";
和str2="aaa"
实际上有个地址池,里面有"aaa"的地址,
然后你赋值给str1和str2时都先会进入池去看看是否有这个内容
如果有则赋予值,没有再new
所以str1="aaa" 和str2="aaa";
其地址相同。