对JAVA基础掌握比较好的,没什么说的,进来看看吧!!!!!!!!!! 最后一个为FALSE是什么原因呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果System.out.println(java.equals("Ja"+va)); 则相等,真是奇怪啊 == 是对object的地址进行比较,个人认为没什么实际意义。 我觉的,首先,String是一个Object来的,所以用==来比较,是比较他们是否同一个对象,因为java的编译优化的机制,所以 String java = "Java", va = "va"; System.out.println(java == "Java"); System.out.println(Other.java == java); System.out.println(java == ("Ja"+"va")); System.out.println(java == ("Ja"+va)); 前面三个都是在编译的时候就可以静态确定的,所以分配到了同一个对象,所以比较结果是true而第四个,由于"Ja"+va是要等到运行的时候才能确定,所以会新分配了一个对象,所以是false 前三个为“true”就不用说了,最后一个为false是因为: 在JAVA中,String有专门的strings池存放。当你建立一个String变量,编译时,如果编译器发现池中有相同的变量,它就直接引用该变量,否则创建新的(这一切都是在编译时完成的)。“==”操作比较的不仅是两个变量的值,而且还要比较它们的地址(在池中的位置是否相同),而"ja"+va这句话中由于va不是常量,不能在编译时完成此操作,所以该String不能放到String池中,自然地址不一样,java==("ja"+va)为false了 o,看来要把think in java好好看看咯,仔细研究研究java的思想学习ing..... qq_pride(无悔这一生) 说的对!!! sorry ,the last is false 不要用==判断相等。而要用equals. 对第二个有点不明白,JAVA可以向下继承么? 说老实话,不怕诸位大哥笑话,四个输出都是 false,咱也没有试,只是想出来的。原因如下:对象的比较用==其实是句柄的比较,他们是两个不同的对象,不过所指的内容是一样罢了,但其句柄是不一样的,不知以为然否? true true true false 是这样的 ==用来判断string对象是否相等而 equal()用来判断字符串内容是不是相等 to skydog:string 兼有基本类型的一些特性,如果你用 String x =new String(...)则另当别论。true true true false 为了说明问题,我对原来的程序进行了如下改动:/** BEGIN */class StringLiteral { public static void main(String[] args) { String java = "Java", va = "va"; String java2 = new String("Java"); System.out.println("=== 1 ==="); System.out.println(java == "Java"); System.out.println(Other.java == java); System.out.println(java == ("Ja"+"va")); System.out.println(java == ("Ja"+va)); System.out.println("=== 2 ==="); System.out.println(java . equals ( "Java")); System.out.println(Other.java . equals ( java)); System.out.println(java . equals ( "Ja"+"va")); System.out.println(java . equals ( "Ja"+va)); System.out.println("=== 3 ==="); System.out.println(java == new String( "Ja"+va)); System.out.println(java .equals( new String( "Ja"+va))); System.out.println("\n=== 4 ==="); System.out.println(java2 == "Java"); System.out.println(Other.java == java2); System.out.println(java2 == ("Ja"+"va")); System.out.println(java2 == ("Ja"+va)); System.out.println("=== 5 ==="); System.out.println(java2 . equals ( "Java")); System.out.println(Other.java . equals ( java2)); System.out.println(java2 . equals ( "Ja"+"va")); System.out.println(java2 . equals ( "Ja"+va)); System.out.println("=== 6 ==="); System.out.println(java2 == new String( "Ja"+va)); System.out.println(java2 .equals( new String( "Ja"+va))); } } class Other { static String java = "Java"; } /** END */输出结果是:=== 1 ===truetruetruefalse=== 2 ===truetruetruetrue=== 3 ===falsetrue=== 4 ===falsefalsefalsefalse=== 5 ===truetruetruetrue=== 6 ===falsetrue问题应该已经说明白了。1、 "==" 比较的是内存地址,而不是值。 而"equals"比较的是值,不是地址2、 通过变量声明,没有 new 的String变量,是在编译时确定的, 所有值相同的变量指向同一个地址(共用一个实例)。3、 通过 new 生成的 String 值,是在运行期建立的, 不与其他变量共享内存(建立的时候)。 返回泛型的class c++ 调用 java 的问题 跪求:用JAVA编译一个物理实验测量结果分析系统 提问:switch中接受的合法参数有哪些类型? 如何用JAVA写个程序让本本自动休眠? java中如何画位图? Visual Editor 的安装 谢谢!! 向大家请教一个关于Java开发工具的问题? 大哥哥们,怎么在applet里面添加打开一个特定地址的网页的代码啊? 在JTABLE中如何实现左边几列固定不动,水平和垂直滚动条均具有.(急HELP) 誰能救救我?? 三个月能学会JAVA吗?不要求融会贯通,可不可以开发程序?
所以用==来比较,是比较他们是否同一个对象,
因为java的编译优化的机制,所以
String java = "Java", va = "va";
System.out.println(java == "Java");
System.out.println(Other.java == java);
System.out.println(java == ("Ja"+"va"));
System.out.println(java == ("Ja"+va));
前面三个都是在编译的时候就可以静态确定的,所以分配到了
同一个对象,所以比较结果是true
而第四个,由于"Ja"+va是要等到运行的时候才能确定,
所以会新分配了一个对象,所以是false
在JAVA中,String有专门的strings池存放。当你建立一个String变量,编译时,如果编译器发现池中有相同的变量,它就直接引用该变量,否则创建新的(这一切都是在编译时完成的)。“==”操作比较的不仅是两个变量的值,而且还要比较它们的地址(在池中的位置是否相同),而"ja"+va这句话中由于va不是常量,不能在编译时完成此操作,所以该String不能放到String池中,自然地址不一样,java==("ja"+va)为false了
学习ing.....
而要用equals.
原因如下:对象的比较用==其实是句柄的比较,他们是两个不同的对象,不过所指的内容是一样罢了,但其句柄是不一样的,不知以为然否?
true
true
false
而 equal()用来判断字符串内容是不是相等
string 兼有基本类型的一些特性,如果你用 String x =new String(...)
则另当别论。true true true false
/** BEGIN */
class StringLiteral {
public static void main(String[] args) {
String java = "Java", va = "va";
String java2 = new String("Java");
System.out.println("=== 1 ===");
System.out.println(java == "Java");
System.out.println(Other.java == java);
System.out.println(java == ("Ja"+"va"));
System.out.println(java == ("Ja"+va));
System.out.println("=== 2 ===");
System.out.println(java . equals ( "Java"));
System.out.println(Other.java . equals ( java));
System.out.println(java . equals ( "Ja"+"va"));
System.out.println(java . equals ( "Ja"+va));
System.out.println("=== 3 ===");
System.out.println(java == new String( "Ja"+va));
System.out.println(java .equals( new String( "Ja"+va)));
System.out.println("\n=== 4 ===");
System.out.println(java2 == "Java");
System.out.println(Other.java == java2);
System.out.println(java2 == ("Ja"+"va"));
System.out.println(java2 == ("Ja"+va));
System.out.println("=== 5 ===");
System.out.println(java2 . equals ( "Java"));
System.out.println(Other.java . equals ( java2));
System.out.println(java2 . equals ( "Ja"+"va"));
System.out.println(java2 . equals ( "Ja"+va));
System.out.println("=== 6 ===");
System.out.println(java2 == new String( "Ja"+va));
System.out.println(java2 .equals( new String( "Ja"+va)));
}
}
class Other { static String java = "Java"; }
/** END */
输出结果是:
=== 1 ===
true
true
true
false
=== 2 ===
true
true
true
true
=== 3 ===
false
true=== 4 ===
false
false
false
false
=== 5 ===
true
true
true
true
=== 6 ===
false
true问题应该已经说明白了。
1、 "==" 比较的是内存地址,而不是值。
而"equals"比较的是值,不是地址
2、 通过变量声明,没有 new 的String变量,是在编译时确定的,
所有值相同的变量指向同一个地址(共用一个实例)。
3、 通过 new 生成的 String 值,是在运行期建立的,
不与其他变量共享内存(建立的时候)。