请教一个很基础的问题:字符串的定义 请问:下面两种定义字符串的形式都有哪些不同呢??什么情况下使用第一种,什么情况下使用第二种? String s1 = "abc"; String s2 = new String("abc"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第二种是构造一个新的String,第一种是把字符串内容放在了对象池中,具体我也不太清楚.这段代码是引用koj5201314 的,我觉得不错.public static void main(String[] args) { String str1 = "Hello World! "; String str2 = "Hello World! "; System.out.println(str1.hashCode()); System.out.println(str2.hashCode()); // 比较字符串的值 System.out.println(str1.equals(str2));// 输出true // 比较两个字符串的hashcode,默认是内存地址 System.out.println(str1 == str2);// 输出true String str3 = "Hello World! "; String str4 = new String( "Hello World! "); System.out.println(str3.hashCode()); System.out.println(str4.hashCode()); // 比较字符串的值 System.out.println(str3.equals(str4));// 输出true // 比较两个字符串的hashcode,默认是内存地址 System.out.println(str3 == str4);// 输出false } 控制台结果: -969099747 -969099747 true true -969099747 -969099747 true false <第二种是构造一个新的String,第一种是把字符串内容放在了对象池中>是什么意思啊,对象池是啥??? String s1 = "abc "; 在java程序中,只要有string literal,compiler 就会创建一个string object。LZ可以自已去看看。http://java.sun.com/docs/books/tutorial/java/data/strings.html http://hi.baidu.com/johnsoncr/blog/item/aa345bf9590c2e5a252df202.html看下这里的 第一个是把变量"abc"赋给对象s1;第二个是重新创建一个对象,把第一个的对象值赋个新创建的对象 嘿嘿 这个问题 是个很著名的面试题来着的:String s = "shabi";String ss = new String("sb");(2条代码同时出现)第一条代码 生成几个对象:第2条代码 生成几个对象答案:1;2;至于为什么,我就不解释了,论坛上有好多解释的帖子,自己去找。。补充:如果是这样:String s = "shabi";String ss = new String("shabi");(2条代码同时出现)这样就都是1个对象了 单独出现时:String s1 = "abc "; 生成一个对象,在栈里 String s2 = new String( "abc ");生成两个对象,栈里一个,堆里一个(new的作用是开辟一片新的内存),同时出现时String s1 = "abc "; 生成一个对象,在栈里String s2 = new String( "abc ");栈里的“abc”已经有了,所以不需要在 创建,就只在堆里创建了一个对象 7楼所说的< 生成两个对象,栈里一个,堆里一个 >栈里也可以存放对象吗,我听老师讲过说对象生死在堆里的啊! 后一种是构造了一个Stirng对象前一种只是定义了一个String类型的变量 是不能当对象处理和使用的前一种就可以 这两个方法应该是一样的,使用上应该没有区别吧就跟i = i + 1;跟i ++;一样...没区别 1楼的例子不错. // 比较两个字符串的hashcode,默认是内存地址 System.out.println(str1 == str2);// 输出true这里注释应该是:比较两个字符串的refrence,就是内存地址;没有比较hashcode. 永远不要用第二种方式,从性能上第一种要高一些,应该它只产出一个对象,而第二种则可能产生两个对象(如果当前字符串常量池中没有abc的定义),第二种无非是编码格式好一些。 连个高手也没有吗,怎么没人回答我的问题 哪位大虾能帮忙写一个自定义事件的处理过程 怎么让自己的文件到别机子上运行???????? 程序运行错误,帮我看看 请指教!一下啊,就好 equse 和 == java 如何读取pdf 文件,倒哪里下载开发包 JCreator小问题,但很讨厌!怎么解决?60分! java反射获取当前执行方法上的注解? 新手一枚,求老师给看一下哪里错误编译通不过! swing奇怪问题 求java手机书籍制作工具的原代码.
这段代码是引用koj5201314 的,我觉得不错.public static void main(String[] args) {
String str1 = "Hello World! ";
String str2 = "Hello World! ";
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 比较字符串的值
System.out.println(str1.equals(str2));// 输出true
// 比较两个字符串的hashcode,默认是内存地址
System.out.println(str1 == str2);// 输出true
String str3 = "Hello World! ";
String str4 = new String( "Hello World! ");
System.out.println(str3.hashCode());
System.out.println(str4.hashCode());
// 比较字符串的值
System.out.println(str3.equals(str4));// 输出true
// 比较两个字符串的hashcode,默认是内存地址
System.out.println(str3 == str4);// 输出false
}
控制台结果:
-969099747
-969099747
true
true
-969099747
-969099747
true
false
是什么意思啊,对象池是啥???
LZ可以自已去看看。
http://java.sun.com/docs/books/tutorial/java/data/strings.html
看下这里的
第二个是重新创建一个对象,把第一个的对象值赋个新创建的对象
String s = "shabi";
String ss = new String("sb");
(2条代码同时出现)
第一条代码 生成几个对象:
第2条代码 生成几个对象
答案:1;2;
至于为什么,我就不解释了,论坛上有好多解释的帖子,自己去找。。
补充:
如果是这样:
String s = "shabi";
String ss = new String("shabi");
(2条代码同时出现)
这样就都是1个对象了
String s1 = "abc ";
生成一个对象,在栈里
String s2 = new String( "abc ");
生成两个对象,栈里一个,堆里一个(new的作用是开辟一片新的内存),
同时出现时
String s1 = "abc ";
生成一个对象,在栈里
String s2 = new String( "abc ");栈里的“abc”已经有了,所以不需要在 创建,就只在堆里创建了一个对象
栈里也可以存放对象吗,我听老师讲过说对象生死在堆里的啊!
前一种只是定义了一个String类型的变量 是不能当对象处理和使用的
前一种就可以
// 比较两个字符串的hashcode,默认是内存地址
System.out.println(str1 == str2);// 输出true这里注释应该是:比较两个字符串的refrence,就是内存地址;没有比较hashcode.