首页 > 试题广场 >

请你说说String类,以及new和字符串直接量的区别

[问答题]
请你说说String类,以及new和字符串直接量的区别
m
发表于 2022-03-11 15:47:11 回复(10)
String类被final修饰,所以不能被继承。创建String对象时可以使用字符串直接量,如String str="1abc", 另一种String str=new String("1abc"),前者使用常量池来管理,后者先判断常量池中是否已存在此字符串,不存在就也在常量池创建,再在堆内存创建一个新的对象,因此后者开销更大。
发表于 2022-04-26 18:21:21 回复(1)
String类是由final修饰,所以不能被继承,创建字符串由两种方式,一种是使用字符串直接量,另一种是使用new关键字,当使用字符串直接量的方式来创建字符串时,JVM会使用常量池来管理这个字符串,当使用new关键词来创建字符串时,JVM会先使用常量池来管理字符串直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象,新创建的String对象会被保存在堆内存中。
发表于 2022-05-08 11:46:09 回复(1)
String类是java中常见的一个类,其中有很多已封装好处理字符串的方法,包括常见的charAt查找索引处的字符、indexOf查找字符首次出现的索引、substring截取字符串等方法。java中创建字符串有两种方式,第一种是通过String类直接定义一串字符,JVM会将该字符串放在常量池中,如果再用该方法定义一个相同的字符串则JVM会去常量池中寻找是否已有该字符串,没有则会重建一个,如果已有则不会新建,两个字符串的地址相等(用=符号会判定为true),但用new的方式定义字符串相当于在String类中新建了一个对象,用这种方式创建字符串时虽然也是放在常量池中但每次都会新建一个对象放在堆内存中,两个相同字符串的地址不同(用=符号会判断为false)。
发表于 2022-06-15 19:24:12 回复(0)
请你说说String类,以及new string和使用字符串直接量
发表于 2022-09-24 15:26:00 回复(0)
用string直接量的方式,字符串被储存到常量池中,但是通过new的方式,会在堆内存中创建一个对象,再由堆指向常量池,相比来说,new的方式更耗资源
发表于 2022-08-15 09:15:07 回复(0)
M
发表于 2022-06-06 22:37:35 回复(0)
String是java中使用次数非常频繁的一个对象,所以java内部对其做了很多的优化。在java8之前其底层主要是用的char数组来存储,之后改为了byte来存,以此减少不必要的内存消耗。此外,jvm中还维护了一个常量池来存储字符串数据,所以对于String类的使用,若是直接赋值会先去常量池中获取这个数据,若是没有会创建一个并把地址交给这个对象,而使用new关键字则至少创建一个对象,若是不存在这个数据就会创建两个对象
编辑于 2024-04-24 22:11:07 回复(0)
我们在创建一个string字符串的时候,常用的创建方式有两种,一是显示字面量赋值,二是通过new,字面量赋值就是直接在字符串常量池中创建,new是首先会看字符串常量池中,是不是有一个我们想要创建的字符串,没有的话就去创建,最后再堆中创建字符串对象,所以通过new会创建两个,一个是在堆中,一个是在常量池中。
发表于 2022-12-26 21:08:54 回复(0)
String类是Java中最常用的API,用于创建字符串和操作字符串,该类被final修斯,所以不可继承。 创建字符串有两种方法:使用字面量创建和使用new关键字创建。 使用字面量创建的字符串变量,引用地址指向的空间是常量池,字符串受JVM常量池管理,下次以同样方式创建同个字符串时,进行复用。 new方法创建的字符串变量,引用地址指向的空间是堆,String实例内部会判断常量池中是否有该字符串,有则部内使指向字符串,没有则在堆中创建字符串,当使用intern()方法进行池化并得到常量池中的地址引用。
发表于 2023-07-02 18:03:22 回复(0)
m
发表于 2023-05-15 13:16:22 回复(0)
String被final修饰的,因此不能被继承,;创建字符串的方式有两种,一种是使用字符串直接量 String str=“abc”,一种是通过new的方式创建,通过直接量创建的直接在常量池中创建,new的方式是先判断有没有在常量池中没有的话在常量池中创建,再在堆内存中创建比较耗内存
发表于 2023-05-07 18:21:36 回复(0)
m
发表于 2023-03-23 09:38:54 回复(0)
string类是用final修饰的,说明该类不可被继承。创建String类对象时,可以使用字面量进行赋值,另一种方法是通过new关键字。前者使用字符串常量池来管理,后者先判断字符串常量池是否有该字符串,如果不存在,则会在字符串常量池创建该字符串对象,同时再在堆内存创建String类对象,后者开销更大。
发表于 2023-02-25 15:12:47 回复(0)
String a = "垃圾Java";String b = new String("垃圾Java");首先 -> 垃圾Java 会存入常量池,a和b指向常量池中的”垃圾Java“,但是b会多new一个对象
发表于 2023-02-24 16:29:24 回复(0)
String类被final修饰,所以不能被继承。创建String对象时可以使用字符串直接量,如String str="1abc", 另一种String str=new String("1abc"),前者使用常量池来管理,后者先判断常量池中是否已存在此字符串,不存在就也在常量池创建,再在堆内存创建一个新的对象,因此后者开销更大。
发表于 2023-02-09 16:05:04 回复(0)
String类是由final关键字修饰的,所以不能继承,直接使用字符串直接量创建时直接使用常量池进行管理,通过new的方式时会判断常量池中是否存在,不存在创建,再在堆中创建对象,占用内存更大
发表于 2024-04-28 18:06:37 回复(0)
String 是一个封装好的char数组。char数组被final 修饰,所以一经赋值,不可修改。 对一个字符串追加或删除,实际上是在内存中新建字符串。 另外,jvm 的堆空间中存在一个字符串常量池,每次新建字符串,都会先去字符串常量池中查看是否已存在,不存在则创建新的。 字符串常量池是一个长度固定的HashTable。 日常使用中要注意 null 和 "" 区别。
发表于 2024-04-25 20:47:06 回复(0)
String被final修饰,不可变,String对象是放在常量池,new的方式是先判断常量池是否存在,不存在就创建,并且在堆中也创建一个对象,开销更大
编辑于 2024-04-03 09:41:06 回复(0)
String类被final进行修饰,意味着不能被继承重写,保证了安全性,而直接使用String进行定义的话是在字符串常量池中进行定义,如果不存在则在常量池进行创建,而new的话在字符串常量池进行设置,并且会在堆中创建一个对象,消耗更大
编辑于 2024-03-31 18:31:30 回复(0)