该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-29
很惭愧,没看懂
|
|
返回顶楼 | |
发表时间:2010-09-29
allskylove 写道 好,不看我刚才发的贴了,哈哈,说实话真的很乱,我是先从word里输入的,再copy 过来的。 没有版面了,字体颜色也没有了。 那就这样哈, String a=new String("abc"); 此问题 要依赖于上下文环境来分情况考虑, 如果上文已经产生了"abc" 那么 该句只创建一个String 对象实例, 如果上文没有产生"abc" 那么就创建两个String 对象实例。
不明白的话,再看我上面的长贴。 额,其实楼主有一个例子: String s1 = new String("xyz"); String s2 = new String("xyz"); 用来说明 【如果上文已经产生了"abc"】 这个情况。 关于你之前说楼主JVM方面有不正确的(“ 对jvm 的了解很是无语”),还希望指出来。 |
|
返回顶楼 | |
发表时间:2010-09-29
这个是栈和堆得问题。
使用new是肯定要产生一个对象的。 直接使用字符串"",虚拟机就会在静态栈上寻找有没有,如果没有再创建这样就有2个对象被创建,如果有那么就会以节约空间的办法,使用这个已经创建的字符串。 这个是我理解的概念,如有不对希望指正。 |
|
返回顶楼 | |
发表时间:2010-09-29
allskylove 写道 好,不看我刚才发的贴了,哈哈,说实话真的很乱,我是先从word里输入的,再copy 过来的。 没有版面了,字体颜色也没有了。 那就这样哈, String a=new String("abc"); 此问题 要依赖于上下文环境来分情况考虑, 如果上文已经产生了"abc" 那么 该句只创建一个String 对象实例, 如果上文没有产生"abc" 那么就创建两个String 对象实例。
不明白的话,再看我上面的长贴。 求教allskylove大大, public class StringDemo2 { public static void m() { String b = "abc"; String a = new String("abc"); } public static void main(String[] args) { m(); m(); } } m 被调用了两次,是不是总共创建了4个String 对象? |
|
返回顶楼 | |
发表时间:2010-09-29
最后修改:2010-09-29
allskylove 写道 你还是再看看吧!我看你被楼主忽悠了! 篇幅长了容易忽悠人! 就想路长了 容易迷路一样! 哈哈。 OK,OK,我又去看了一遍,楼主的文章太长,所以下结论时是有没说清楚的地方, 因为我是本来就知道new String这档子事,所以没有逐字看楼主的文章。 楼主的结论: 所以刚才用于归谬的代码片段: Java代码 String s1 = new String("xyz"); String s2 = new String("xyz"); 每执行一次只会新创建2个String实例。 就是s1 s2 这必须建立在:如果之前有产生"xyz"。 但楼主之前说了: 在运行时涉及(我理解成,在运行那个函数要创建String时) 应该就是说 上下文为:之前有产生"xyz"。 我觉得楼主还不至于“简直是一派胡言”。但关于JVM,我没看到楼主哪说得有问题呀。 |
|
返回顶楼 | |
发表时间:2010-09-29
allskylove 写道 winipon 写道 这个是栈和堆得问题。
使用new是肯定要产生一个对象的。 直接使用字符串"",虚拟机就会在静态栈上寻找有没有,如果没有再创建这样就有2个对象被创建,如果有那么就会以节约空间的办法,使用这个已经创建的字符串。 这个是我理解的概念,如有不对希望指正。 静态栈? 是什么? 我很希望大家发散思维!错了也没有关系,说不定我们的错误就是对世界的更好认识。打破常规是在创新! 理解上的问题,其实就是栈上分配。 |
|
返回顶楼 | |
发表时间:2010-09-29
zx339 写道 allskylove 写道 你还是再看看吧!我看你被楼主忽悠了! 篇幅长了容易忽悠人! 就想路长了 容易迷路一样! 哈哈。 OK,OK,我又去看了一遍,楼主的文章太长,所以下结论时是有没说清楚的地方, 因为我是本来就知道new String这档子事,所以没有逐字看楼主的文章。 楼主的结论: 所以刚才用于归谬的代码片段: Java代码 String s1 = new String("xyz"); String s2 = new String("xyz"); 每执行一次只会新创建2个String实例。 就是s1 s2 这必须建立在:如果之前有产生"xyz"。 但楼主之前说了: 在运行时涉及(我理解成,在运行那个函数要创建String时) 应该就是说 上下文为:之前有产生"xyz"。 我觉得楼主还不至于“简直是一派胡言”。但关于JVM,我没看到楼主哪说得有问题呀。 s1, s2是引用,实例是new 产生的,我的理解是new一次就肯定创建一个对象。所以不管有没有xyz,都会有2个对象产生。 上下文产生没产生xyz,这个不是应该是我们咨询面试官的。 |
|
返回顶楼 | |
发表时间:2010-09-29
allskylove 写道 不许跑,你还说人家JVM了解有问题,他哪说得有问题了? |
|
返回顶楼 | |
发表时间:2010-09-29
非常长…… 见谅不看了^-^
|
|
返回顶楼 | |
发表时间:2010-09-30
这个问题对java应用几乎没什么意义。
|
|
返回顶楼 | |