Java String的理解
发布时间:2020-12-15 07:29:44 所属栏目:Java 来源:网络整理
导读:Java String的理解 在Java中String是一个比较特殊的对象---不可继承,不可变,直接赋值创建 不可继承,不可变 String 类型被标 final 关键字修饰,所以不可继承 public final class String implements java.io.Serializable,ComparableString,CharSequence {
Java String的理解在Java中String是一个比较特殊的对象---不可继承,不可变,直接赋值创建 不可继承,不可变
public final class String implements java.io.Serializable,Comparable<String>,CharSequence { // .... }
public final class String implements java.io.Serializable,CharSequence { private final char value[]; public String() { this.value = "".value; } } String的创建Sting类型是Java中最常用的一个对象,可以通过两种方式进行创建
JVM对直接赋值的String类型,会先从常量池中查询对应的String类型,如果没有则会创建一个存储到常量池中,然后返回该引用。 // 直接赋值 String s = "llll";
String方法简介构造方法
public String() { this.value = "".value; } public String(String original) { this.value = original.value; this.hash = original.hash; }
// 根据整个字符数组创建字符串 public String(char value[]) { this.value = Arrays.copyOf(value,value.length); } //截取部分字符数组创建字符串 public String(char value[],int offset,int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count <= 0) { if (count < 0) { throw new StringIndexOutOfBoundsException(count); } if (offset <= value.length) { this.value = "".value; return; } } // Note: offset or count might be near -1>>>1. if (offset > value.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } this.value = Arrays.copyOfRange(value,offset,offset+count); }
// 没有使用过。。。 public String(int[] codePoints,int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count <= 0) { if (count < 0) { throw new StringIndexOutOfBoundsException(count); } if (offset <= codePoints.length) { this.value = "".value; return; } } // Note: offset or count might be near -1>>>1. if (offset > codePoints.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } final int end = offset + count; // Pass 1: Compute precise size of char[] int n = count; for (int i = offset; i < end; i++) { int c = codePoints[i]; if (Character.isBmpCodePoint(c)) continue; else if (Character.isValidCodePoint(c)) n++; else throw new IllegalArgumentException(Integer.toString(c)); } // Pass 2: Allocate and fill in char[] final char[] v = new char[n]; for (int i = offset,j = 0; i < end; i++,j++) { int c = codePoints[i]; if (Character.isBmpCodePoint(c)) v[j] = (char)c; else Character.toSurrogates(c,v,j++); } this.value = v; }
// 需要指定编码集,根据传递的编码集解码 public String(byte bytes[],int length,String charsetName) throws UnsupportedEncodingException { if (charsetName == null) throw new NullPointerException("charsetName"); checkBounds(bytes,length); this.value = StringCoding.decode(charsetName,bytes,length); } public String(byte bytes[],Charset charset) { if (charset == null) throw new NullPointerException("charset"); checkBounds(bytes,length); this.value = StringCoding.decode(charset,length); } // 根据传入的字节数组和其长度创建字符串 public String(byte bytes[],int length) { checkBounds(bytes,length); this.value = StringCoding.decode(bytes,length); } public String(byte bytes[]) { this(bytes,bytes.length); }
public String(StringBuffer buffer) { synchronized(buffer) { this.value = Arrays.copyOf(buffer.getValue(),buffer.length()); } } public String(StringBuilder builder) { this.value = Arrays.copyOf(builder.getValue(),builder.length()); }
// 预留方法,默认访问类型,通过直接赋值创建字符串 String(char[] value,boolean share) { // assert share : "unshared not supported"; this.value = value; } 静态方法
调用toString()方法 public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } public static String valueOf(int i) { return Integer.toString(i); } public static String valueOf(long l) { return Long.toString(l); } public static String valueOf(float f) { return Float.toString(f); } public static String valueOf(double d) { return Double.toString(d); } 调用构造 public static String valueOf(char data[]) { return new String(data); } public static String valueOf(char data[],int count) { return new String(data,count); } public static String valueOf(char c) { char data[] = {c}; return new String(data,true); } public static String copyValueOf(char data[],count); } public static String copyValueOf(char data[]) { return new String(data); } boolean public static String valueOf(boolean b) { return b ? "true" : "false"; }
public static String format(String format,Object... args) { return new Formatter().format(format,args).toString(); } public static String format(Locale l,String format,Object... args) { return new Formatter(l).format(format,args).toString(); } 普通方法intern()方法 public native String intern();
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- spring boot自定义log4j2日志文件的实例讲解
- 8 Great Java 8 Features No One's Talking
- java – NullPointerException onActivityCreate
- java – 如何构建同一个加载不同类加载器的两个实
- JSP Response.invalidate()方法:销毁session对象
- spring cloud config分布式配置中心的高可用问题
- java – 如何仅跳过“编译”和“安装”目标的测试
- Java使用commons-net实现FTP文件上传
- Java:在各种其他类中使用相同的类实例
- Java实现生成Excel树形表头完整代码示例
热点阅读