⑴ java:请教关于String对象的重新赋值
String类的源代码如下:
/** The value is used for character storage. */
private final char value[];
首先你要明白,字符串的本质是一个字符数组。
value属性用来存放字符串中的字符,是一个final属性,即:不可被修改的属性。
所以,每当你要改变这个字符串的值时,都会在原来字符串的基础上产生一个新的字符串。
原来的字符串保持不变。即你说的:如果要改变则需要先断开原有的对象引用,再开辟新的对象,之后再指向新的对象空间.
⑵ java源代码String类的问题
1、count是传入的参数(也就是original)的长度,可以看src下的注释:
/** The count is the number of characters in the String. */
所以一开始不是0,而是original.length()
2、count是私有成员,private修饰的意思就是说只有在类的内部可以使用,因此在String类的内部可以直接访问其他String类的内部函数
⑶ java 中string类怎么实现
ava字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生。
一、从根本上认识java.lang.String类和String池
首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点。从中可以看到:
1、String类是final的,不可被继承。public final class String。
2、String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];
然后打开String类的API文档,可以发现:
3、String类对象有个特殊的创建的方式,就是直接指定比如String x = "abc","abc"就表示一个字符串对象。而x是"abc"对象的地址,也叫
做"abc"对象的引用。
4、String对象可以通过“+”串联。串联后会生成新的字符串。也可以通过concat()来串联,这个后面会讲述。
6、Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,
并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。
⑷ java编程中把类名设置为了String,以后的Java源码无法编译报错如下,请问如何解决
第一个错误,jdk编译的时候 不知道这个 myqq 是个啥,你也没有贴出来代码,我估计是这个变量定义有问题
第二个错误,自己定义的String类 跟jdk自带的String类没有任何关系,无法强制转换,肯定会报错,这就相当于你 把java中的 Integer 强制转换成 Student 类,从根上就不一样
⑸ Java string源码中的属性value是如何被赋值的
Java string源码中的value是通过一个stringbuffer数组赋值的。
⑹ java中String是什么
Java字符串,在开发中用的是比较频繁的一个类,我们平时要表达一句话的含义,就可以使用字符串(String)来详细的描述;
Java中已经将字符串进行了很好的封装,我们可以使用String类将字符串进行随意的操作,比如字符串的反转,字符串的分割,字符串的拼接等。
Java String类提供了很多的构造方法,他可以根据我们传入的不同的参数,转换成我们想要的数据;比如可以将字符数组,字节数据,ASCII码数组转换为字符串,而且可以根据传入的参数,判断将数据的哪些位置的内容转换为字符串;
在java中除了String之外还有几个常用的字符串类StringBuffer和StringBuilder,在执行效率方面StringBuilder最快,String最慢,在Java源码中,String类里面有个常量private final char value[];用来存储字符串信息,多以对象一旦创建成功之后,内容就不会改变,但实际上修改值得时候,是不断的创建回收内容,所以String速率最慢;StringBuffer和StringBuilder都是继承于AbstractStringBuilder这个类,在这个类中有个变量char[] value;数组进行字符串内容的存储,变量是可变的,所以不用随时去分配空间,速度相对于String就会快;对于StringBuffer和StringBuffer两个类,在源码中由于StringBuffer中很多方法都被synchronized修饰,所以StringBuffer是线程安全的,也是由于这个原因,StringBuffer速度就相对于StringBuilder慢;
在我们操作比较少量的数据的时候可以使用String,如果数据在多个线程中共享,需要考虑到线程安全,可以使用StringBuffer;
以下为java中String常用的方法示例:
更多java学习方面的问题可以访问这个网页,网页链接,希望我的回答能帮到你。
⑺ 如何查看java string源码
java查某个类的源码可以通过jar包
例如查看java.lang.Integer源代码
把src解压了就行了啊,然后打开解压后的src文件夹下的java/long/ 就有Integer.java文件了
⑻ 关于JAVAString类equals方法的源代码
Sting创建的是两个对象,一个是存在常量池中,还有一个是存在对象栈中。
⑼ String类源码笔记(一):成员变量和构造器
String类表示字符串,所有类似"abc"形式的字符串(或魔法字符串)都被看作是这个类的实例。String是不可变的,当一个字符串在常量池中被创建时,他的值就不会被改变。
所在路径:javalangString.java
为了保证String类是一个不可变类,String类的成员变量多为私有和不可变的。
其中serialPersistentFields在序列化时使用:
JDK8的String类一共有16个构造器,其中两个是@Deprecated,一个是私有构造器,剩下的13个是可以调用的。
无参构造器直接将""的value赋值给当前类的value。""的value是一个空的char[],其length为0。调用使用了无参构造器的String对象的isEmpty()方法会得到true,调用length()方法会得到0,判断其==null会得到false。
入参为String对象时,构造器会对其进行直接取值。
入参为字符串数组时,构造器调用的是Arrays.Of()方法。
其中Arrays.Of()方法是为了将入参的字符串序列深拷贝到this.valuie中,他的源码为:
其中System.array()方法的源码为:
这个方法支持直接传入想要生成的String的母串,通过偏移量和有效长度找出需要赋值给this.value的部分,然后调用Arrays.OfRange()方法进行深拷贝。
当需要将一个Unicode编码序列转换为String时,可以使用以下构造器:
当需要将一个bytes[]转换为String时,可以使用以下构造器:
此外,还有一些将上述构造器进一步封装的构造器,其本质都是简化入参。另外,String类的构造器同样支持传入StringBuffer和StringBuilder。如果传入的是StringBuffer,构造器会为其加锁。如果传入的是StringBuilder则不会加锁。
事实上,StringBuffer和StringBuilder的toString()方法调用的也是String类的构造器,他们最终的底层实现都是Arrays.Of()。
最后,String类还提供了一个保护类型的构造方法。该方法相比入参为char[]的构造器多了一个share参数,这个参数并没有实际作用,只是用来和其他构造器进行区分。当String类内部调用该构造器时:
该构造器不能对外暴露的原因是需要保持String类的不可变性。
⑽ java中string的源码怎么在eclipse中查看
你要先将java的源码包在eclipse设置一下,在查看Sstring类的时候,直接ctrl+鼠标左键点击类型名称即可进入对应的源码文件,设置源码包你需要网络一下,我好久前的了