Topic: java中可不可以定义一个string 的长度?

  Print this page

1.java中可不可以定义一个string 的长度? Copy to clipboard
Posted by: 67865695
Posted on: 2006-11-02 14:36

string 的长度可以用 length()来得出,
但能不能定义一个string 的长度?(暂时不设置string的值)
谢谢

2.Re:java中可不可以定义一个string 的长度? [Re: 67865695] Copy to clipboard
Posted by: cxp108
Posted on: 2006-11-03 08:58

如果你对JVM的机制有深入了解的话,你应该知道Java中的String 对象一旦生成,它就是完全不可变的,当你试图该变一个String时,其实JVM作的实际工作是重新生成一个String。

因此,设定String的长度意义不大。

3.Re:java中可不可以定义一个string 的长度? [Re: 67865695] Copy to clipboard
Posted by: shom0058
Posted on: 2006-11-03 09:47

同意二楼的看法,如果你想改变的话建议使用StringBuffer

4.Re:java中可不可以定义一个string 的长度? [Re: 67865695] Copy to clipboard
Posted by: dejinzhao
Posted on: 2006-11-05 08:04

不知道这个程序对你有无帮助:利用java的反射性能你可以改变对象的一切、无论是不是私有的还是公共的

public class TestString {
public TestString() {
try{
Class firstClass = String.class;
java.lang.reflect.Field field=firstClass.getDeclaredField("count");
String myString=new String();
field.setAccessible(true);
field.setInt(myString,5);
//System.out.println(myString);现在调用该方法会发生如下异常
/**
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.lang.String.getChars(String.java:726)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:394)
at java.lang.StringBuilder.append(StringBuilder.java:120)
at fff.<init>(fff.java:22)
at fff.main(fff.java:46)
*/
java.lang.reflect.Field newField=firstClass.getDeclaredField("value");
char[] ch={'t','h','i','s',' ','i','s',' ','s','t','r','i','n','g'};
newField.setAccessible(true);
newField.set(myString,ch);
field.setInt(myString,ch.length);
System.out.println(myString);
//运行后输出“this is string”
}catch(Exception e){
e.printStackTrace(System.out);
}
}
public static void main (String args[]) {
new TestString();
}
}

5.Re:java中可不可以定义一个string 的长度? [Re: 67865695] Copy to clipboard
Posted by: dejinzhao
Posted on: 2006-11-05 08:10

修改了疏忽处
public class TestString {
public TestString() {
try{
Class firstClass = String.class;
java.lang.reflect.Field field=firstClass.getDeclaredField("count");
String myString=new String();
field.setAccessible(true);
field.setInt(myString,5);
System.out.println("myString.length()="+myString.length());//运行结果myString.length()=5
//System.out.println("myString="+myString);//现在调用该方法会发生如下异常
/**
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.lang.String.getChars(String.java:726)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:394)
at java.lang.StringBuilder.append(StringBuilder.java:120)
at TestString.<init>(fff.java:10)
at TestString.main(fff.java:32)
*/
java.lang.reflect.Field newField=firstClass.getDeclaredField("value");
char[] ch={'t','h','i','s',' ','i','s',' ','s','t','r','i','n','g'};
newField.setAccessible(true);
newField.set(myString,ch);
field.setInt(myString,ch.length);
System.out.println(myString);
//运行后输出“this is string”
}catch(Exception e){
e.printStackTrace(System.out);
}
}
public static void main (String args[]) {
new TestString();
}
}

6.Re:java中可不可以定义一个string 的长度? [Re: 67865695] Copy to clipboard
Posted by: 67865695
Posted on: 2006-11-05 16:22

谢谢大家了,我知道了


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923