关于String



http://zhidao.baidu.com/question/289430162.html


String s=new String("xyz")究竟创建了几个String Object? 2个?哪2个?答对有奖

2011-07-08 10:19 shling123 | 分类:其他编程语言 | 浏览10272次
大家说清楚点 哈 ,我来终结下这个问题。。。集思广益哈,求说出这个创建的详细过程
2011-07-08 10:37 提问者采纳
是2个不假。
一个是编译时决定的,最后放在常量池中。一个是运行时放在堆里面的。两个都是"xyz",我只能这么说了。还有的,s确实只是一个引用,本身不是对象。java不是纯粹的面向对象,也就是说并不是所有的都是对象,如基本类型等,没清楚的再问我吧
追问
哈 我认同这位大侠的。。。。。。若果编译期间常量池已经有“xyz”对象的话,那么这个就可能创建一个对象吧。。。是不是?
回答
常量池中只可能只有一个“xyz”,但是堆中可能有多个,因为你这里用了new String来强制在堆中再创建了一个对象,所以是两个哈;如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。
追问
呵呵 说的好!!!上面3位都有都有研究。。呵呵我看了好多都是说s是对象的,无语。。。。今天就把这个疑问给结了
回答
最后再说加一句吧,对于String 这种不可变对象,有几个对象真正的不会对程序有影响,你们都太认真了,太纠结了。要了解java中的对象等东西,建议看一下java虚拟机的教材,这个不是说你工作多久就清楚的,我敢说现在没多少人清楚自己在用些什么!
提问者评价
谢谢2楼 3楼 ,1小菜鸟也该好好看看书。。。。。哈哈哈
评论(14) | 56

main_inf |七级采纳率27%

擅长:JAVA相关

按默认排序|按时间排序

其他6条回答

2011-07-08 10:30 wzjlovemjx | 八级
昨天有网友说java一切皆是对象,这句不错。
你哪个很明显是3个对象阿!

"xyz"是一个
String s又是一个,
new String(“xyz”)又是一个
追问
大侠 你确定?
回答
哈哈。肯定错误阿。应该是2个。玩玩,一会给你好好解释下2个的原因。
String       s       =       new       String(   "xyz   ");  

首先在string池内找,找到?不创建string对象,否则创建,       这样就一个string对象  

遇到new运算符号了,在内存上创建string对象,并将其返回给s,又一个对象  

所以总共是2个对象
追问
楼下给的解释 你赞同吗?
回答
哈哈。很不错的答案!!
个人认为2楼的说的更加明白
2个的原因是:
一个是你的Class被CLassLoader加载时,你的"xyz"被作为常量读入,在constant   pool里创建了一个共享的"xyz"  , 然后,当调用到new   String("xyz")的时候,会在heap里创建这个new   String("xyz");
评论(1) | 3
2011-07-08 10:24 hanwt139 | 八级
2个
“xyz”一个
new String() 一个
s不是,只是引用
追问
哈 这位仁兄快接近答案了,说详细点
回答
??难道不是2个??
追问
你不觉得有可能是1个  或者2个?
回答
为什么不确定??
应该就是2个
追问
有没有一个的可能?
回答
没有。不用多想了。
另外 1楼在瞎扯,他2年的确白混了,根本不懂 引用和对象的区别。
String s 里的s 只是一个引用,它相当于“门牌”,只是用来指向“房子”,也就是对象的。
它的作用和c里的指针类似,但是一些细节特性上有差别,不过这个不是c#和java里有必要去考虑的。
评论(1) | 8
2011-07-08 10:22 wxj1115 | 五级
有2个String对象
"xyz"是一个
String s又是一个,
我要大奖
追问
。。。。。。。。s是对象吗?
回答
对,s是一个对象
追问
是吗?
回答
你还怀疑。。。我疯了
绝对没错,错了我就白混2年了
追问
今天我翻了下java编程思想4,发先他说s不是对象,它只是句柄或者说是引用。。。。。。。。而却s存在栈里,不对堆里。。。。。栈能存对象?栈好像只能存基本类型 和对象句柄 (也就是s罗)
回答
String s;
这样是不是又1个s对象?
s的值是"xyz",懂了没?
举例List list = new ArrayList();
这样是不是一个list对象啦。
追问
不知道是你不懂,还是我不懂。。。。。。。求大侠解释。。。。。。。。
回答
s是引用对象

### 回答1: 在 Java 中,可以使用 `Collections.sort` 方法来对字符串列表进行排序。以下是一个简单的例子: ``` import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SortStringExample { public static void main(String[] args) { List<String> names = new ArrayList<>(); names.add("John"); names.add("Adam"); names.add("Eve"); // 排序前 System.out.println("Before sorting: " + names); // 使用 Collections.sort 方法进行排序 Collections.sort(names); // 排序后 System.out.println("After sorting: " + names); } } ``` 该程序将输出: ``` Before sorting: [John, Adam, Eve] After sorting: [Adam, Eve, John] ``` ### 回答2: 可以使用Java的Arrays工具类中的sort方法来对字符串数组进行排序。下面是一个简单的示例代码: ```java import java.util.Arrays; public class StringSort { public static void main(String[] args) { String[] arr = {"apple", "banana", "cat", "dog", "elephant"}; System.out.println("排序前:"); for (String str : arr) { System.out.println(str); } Arrays.sort(arr); System.out.println("\n排序后:"); for (String str : arr) { System.out.println(str); } } } ``` 以上代码创建了一个字符串数组,使用Arrays类的sort方法对数组进行排序,并输出排序前和排序后的结果。 输出结果: ``` 排序前: apple banana cat dog elephant 排序后: apple banana cat dog elephant ``` ### 回答3: 下面是一个Java中基于字符串排序的方法: ```java import java.util.Arrays; public class StringSort { public static void main(String[] args) { String[] strArr = {"apple", "banana", "cat", "dog"}; System.out.println("排序前:"); for (String str : strArr) { System.out.println(str); } sortStringArray(strArr); System.out.println("排序后:"); for (String str : strArr) { System.out.println(str); } } public static void sortStringArray(String[] arr) { Arrays.sort(arr); } } ``` 这个示例代码中,首先定义了一个包含多个字符串的字符串数组 `strArr`。然后通过调用 `sortStringArray` 方法对字符串数组进行排序。在 `sortStringArray` 方法中,使用 `Arrays` 类的 `sort` 方法对字符串数组进行排序。最后通过遍历排序后的字符串数组输出结果。 请注意,这里使用的是字典序(按照字母顺序)进行排序。如果需要根据其他自定义的排序规则进行排序,可以使用比较器(Comparator)来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值