关于用new创建对象
为啥有的时候创建对象需要new有的时候不需要比如String类{:10_247:} 有的时候他是把new封装到一个方法里了,其实最终还是要new的 alltolove 发表于 2017-11-13 15:05有的时候他是把new封装到一个方法里了,其实最终还是要new的
怎么说呢?什么叫最终还是要new,像String对象这样的,代码里并没有new它啊,还是说java虚拟机帮他自动完成了?如果是这样,又如何辨认哪些需要(显示地)用new,哪些是计算机来完成的呢?{:10_245:} 调用的话肯定要new出来,String是Java封装好了的 懒癌患者 发表于 2017-11-14 08:09
调用的话肯定要new出来,String是Java封装好了的
jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner 月满霜华 发表于 2017-11-14 08:45
jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner
话不不投机...对象有很多.. 楼主的这个问题瞬间无解{:10_250:好像在说:“中国为什么也有说外语的?”
懒癌患者 发表于 2017-11-14 11:11
楼主的这个问题瞬间无解{:10_250:好像在说:“中国为什么也有说外语的?”
我只是想请教什么时候不需要在代码里手动写new...哪里话不投机了{:10_266:} 楼主菜鸟还爱钻牛角尖啊,答案:
静态类不需要new,就这么简单,
终于你说的字符串不需要new,呵呵
String str = "Hello";你说的是这样吗?
我来解释下这个过程吧,首先,这个"hello"叫做字面量
编译器在编译的时候,生成的实际上是一个静态常量
jre运行时会把它加载到常量池里面(可以理解为一个静态常量,注意是静态)
当运行到String str = "Hello"这里时,实际上是把这个静态常量的引用给str这个String变量
如果String str = "Hello" + i;那么会在堆空间创建一个字符串,然后从常量池中取得Hello这个字符串,放到这个新的字符串中,再把i放到这个新的字符串中,再把这个新的字符串的引用给str
所以,没事别瞎拼字符串,耗内存
最后,如果字面量是"Hello"+"World",那么编译后常量池的值是HelloWorld,而不会产生两个字符串 本帖最后由 hacker.jin 于 2017-11-16 12:59 编辑
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:
静态类不需要new,就这么简单,
其实你可以理解为,静态的东西,在jvm启动时就已经"""new"""出来了,后面用的时候只要活得他的引用就可以了
还有main方法必须是静态的,也是这个原因,另外,关于new,你先搞清楚什么是面向对象,类是可以比喻成人类,注意是人类,不是人,人类是一个概念,一个统称,表示了所有人,而new就是你和你老婆XXOO生出一个新的人,这个XXOO的过程就是new,如果还不懂,你别学java了 hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:
静态类不需要new,就这么简单,
好深刻{:10_245:} hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:
静态类不需要new,就这么简单,
多谢啦。{:10_281:}
页:
[1]