java字符串-string创建对象问题字符串常量池问题

问题描述

string创建对象问题字符串常量池问题

String a=new String("aaaa")如果之前常量池没有aaaa字符串,那么这句代码具体创建的是几个对象?,

解决方案

string是比较特殊的。
new String就好比开了一个空间里面装着aaa而且有了自己的地址符。也就是说是一个对象了。
而String a也是一个对象,你要记得每个类型都有默认值的,但是后面的等于号是将new String的地址符给了a,这时a也指向那个空间,于是它的值也是aaa.
其实在工作编程中是不用这么计较的,用一个定义一个就好。
String是类型,也就是说它有默认值,你记得这一点就行了。只不过它也可以像实例化对象一样赋值。
希望回答对你有帮助

解决方案二:

String 要看是怎么赋值的
1.String str = new String("aaaaa");这样通过new 关键字实例化的 内存中会重新分配一个空间 如果还有一个String str2 = new String("aaaaa"); 仍旧是重新分配空间。
两个虽然都是“aaaaa”但是指向不同的地址。这和普通了没什么区别
2.String str3 = "aaaaa";这样赋值的话,你可以这样理解:把“aaaaa”这个常量赋值给str3,就是指向常量的地址。所以str4=“aaaaa”;则str3和str4都指向该常量的地址。

解决方案三:

一个对象,变量a是对象的引用

解决方案四:

创建了两个对象,一个对象存在于堆内存中,还有一个对象存在于常量池中,堆中对象的值就是指向常量池中的地址的。

解决方案五:

String a=new String("aaaa"),当这个主线程没有走完的时候,创建这个a对象它会先在栈内存中创建一个a对象,之后会去常量池中查看是否有个String类型的aaaa,如果没有,就会创建一个,如果有的话,就会直接使用这个值,但要注意,你这里用了一个new关键字,这时候,它会在把常量池里面的aaaa值重新复制一遍到堆里面去,这时候又在堆里面创建了一个对象。因此应该有2个或3个对象。
String a = "aaaa";
String b = "aaaa";
String c = new String("aaaa");
System.out.println(a==b);
System.out.println(a==c);
打印出来的结果就是a,b都是用的常量池里面的aaaa对象,地址相同。a,c中a用的是常量池里面的aaaa地址,c用的是复制的aaaa放在堆中的地址,因此地址不同,所以答案是true,false。

解决方案六:

如果常量池没有"aaaa"字符串,那么通过new关键字来创建一个String时,创建的会是两个对象。

在执行String a=new String("aaaa")时,首先会在String池中创建一个可共享的字符串对象;然后通过new关键字,在内存中会创建一个包含了"aaaa"的String对象

解决方案七:

两个
String a=new String("aaaa");
第一步会在堆中创建一个String对象,这是使用new关键字的必然结果。
第二步会在字符串池中也创建一个String对象。

时间: 2024-08-31 11:15:52

java字符串-string创建对象问题字符串常量池问题的相关文章

string-关于java中String类型汉字字符串的升序问题

问题描述 关于java中String类型汉字字符串的升序问题 本人新手,遇到一个项目问题:有若干个对象,每个对象里面都有一个String类型的姓名属性,现在要求根据姓名属性的升序将这些对象排列在List集合里,问如何将String类型的汉字升序排列.求大神 解决方案 String[] strs = {""张三(Z)""李四(L)""王五(W)""}; // 定义一个中文排序器 Comparator c = Collator.g

java有栈,堆,常量池,除了这三个还有哪些域,他们的统称是什么?

问题描述 java有栈,堆,常量池,除了这三个还有哪些域,他们的统称是什么? java有栈,堆,常量池,除了这三个还有哪些域,他们的统称是什么? java有栈,堆,常量池,除了这三个还有哪些域,他们的统称是什么? java有栈,堆,常量池,除了这三个还有哪些域,他们的统称是什么? 解决方案 还有个叫全局数据区,统称为内存 解决方案二: http://www.cnblogs.com/dingyingsi/p/3760447.html 堆 栈 本地方法区(常量池是其中一部分) 计数器 本地方法栈(调

Java中String类(字符串操作)的10个常见问题和解决方法_java

本文介绍Java中关于String最常见的10个问题: 1. 字符串比较,使用 "==" 还是 equals() ?简单来说, "==" 判断两个引用的是不是同一个内存地址(同一个物理对象).而 equals 判断两个字符串的值是否相等.除非你想判断两个string引用是否同一个对象,否则应该总是使用 equals()方法.如果你了解 字符串的驻留 ( String Interning ) 则会更好地理解这个问题 2. 对于敏感信息,为何使用char[]要比Stri

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

java中 String类常量池

java中 String类常量池 String常量池详解: 1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable).String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("i am")实际创建了2个 String对象,一个是"i am"通过

Java中的String与常量池

string是java中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.下面介绍java中的String与常量池. 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new String("")都是申明一个新的空字符串,是空串不是null: 3. String st

Java的string类常量池及不可变性

1.String常量池     当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中.即new String("hello")一共产生了两个字符串对象. [常量池constant pool]管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类.方法.接口中的常量,和字符串常量.  [字符串常量池

java String类常量池分析及"equals"和"==”区别详细介绍_java

java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可

helloworld-关于字符串常量池的问题

问题描述 关于字符串常量池的问题 String s1="hello"; String s2="world"; String s3="helloworld"; System.out.println(s3.equals((s1+s2))); 存在几个helloworld? 如果此时将helloworld赋值给变量s5 则赋值的是哪一个helloworld 解决方案 字符串常量会存在常量池里,每定义一个字符串,都会先查看常量池,如果有,就直接使用已有的