搜索
首页 电脑/网络 程序设计 JAVA相关

java中班级用什么字符类型表?

java中班级用什么字符类型表示

全部回答

2013-12-06

78 0

用String型 如: String banji = "三班"; String banji2 = "五班";

2013-12-06

89 0

    String的学习应用 String的intern方法 “当调用 intern 方法时如果池已经包含一个等于此 String 对象的字符串该对象由 equalsObject 方法确定 则返回池中的字符串否则将此 String 对象添加到池中并且返回此 String 对象的引用。
    它遵循对于任何两个字符 串 s 和 t当且仅当 s。equalst 为 true 时s。intern t。intern 才为 true”这是jdk文档原文 注解。现在我们回到最开头的那个例子为什么String strnew Stringaaa会产生2个对象一个是aaa又作 为字符串构造函数的参数但aaa自己就是一个字符串在传进构造函数前就已创建了一个字符对象实质上与就好比是 第二个实例String straaa 它创建的字符串对象会放入到池中并且引用的也是池中的那个字符串对象 另一个就是通过new String构造函数创建的。
    所以new Stringaaa会产生两个对象也就是说通过此种方式创 建字符串对象时会先将字符串参数对象放入对象池然后另外创建一个字符串对象。理解完new Stringaaa为什么 会产生两个对象我们再来看看new Stringchar value这样的方式创建时又会不会把字符串对象放入到池中呢 答案是不会的。
    因为传递给构造函数的是一个字符数组而不是像前面传递的是一个字面常量字符串参数那样将字符串参 数本身放入池中。那么我们现在如果证明new Stringchar value未将字符串对象放入池中我们可以写一个简单 的测试运行时打开XP的任务管理器查看操作系统的内存使用情况就可以初步确认 方法测试如下monitorCPU 所以创建字符串对象放入并放入池中有二种方式第一种就是直接使用字面常量定义字符串时如 String straaa str会引用放入池中的对象第二种就是使用带字符串参数的字符串构造函数并且此时传入的参数值要是字符串常量形式 而不能是变量的形式也就是说只能是 String strnew Stringaaa形式而不能是先定义 String s aaa 然后再使用 String strnew Strings来创建对象new Strings此时只创建一个对象但如果池中不存在时我 们可以使用intern方法将它放入池中。
    当然上面放入池中的前提是池中还不存在这些字符串对象。其实当我们仔细研究时 发现放入池中只实质上只存在一种时机那就是直接使用字面常量字符串时。上面所说的两种时机实质上就是直接使用了字面常的字符串而将其放入池中的。
   上面多处提到了JVM中的堆栈下面小结一下各自原作用 栈用来保存基本类型与对象的引用的基本型在创建前会查看Stack中是否已经有 有则指向 没有则创建。   String内部是以字符串数组来存储字符串的因此可以认为与char等同 String a abc首先在Heap中创一个对 象再到Stack中找char是否存在有则指向该地址 无则在Stack中创建数组 new出来的都是在Heap中堆是用于存储对象的。
   author longgangbai date 2010-5-14 version 1。  0 since JDK6。0 / public class JavaString / 下面声明相等于两个字符串一个有java虚拟机创建的字符串常量“aaa”和创建在堆时的原实例对象。
   str是一个字符串的声明是一个字符串的引用放在堆里用来指向对中创建出来的对象。   相当于一个字符创创 常量池constant pool指的是在编译期被确定并被保存在已编译的。
  class文件中的一些数据。 它包括了关于类、方法、接口等中的常量也包括字符串常量。 / String strnew Stringaaa / 只创建1个对象。这里涉及到字符串常量池在JVM中有一个字符串池它用来保存很多可以被共享的 String对象这样如果我们在使用同样字面字符串时它就使用字符串池中同字面的字符串。
    当然我 们可以使用String对象的intern方法来访问String对象在字符串池中所对应的常量对象。 上面这行代码被执行的时候JVM先到字符串池中查找看是否已经存在值为aaa的对象如果存在 则不再创建新的对象直接返回已存在对象的引用如果不存在则先创建这个对象然后把它加入到 字符串池中再将它的引用返回。
     / String constStr1aaa / 也只创建1个对象。能过上面的解释这个就更清楚了在执行第二行代码时aaa字符串对象在池中已存在 所以直接返回池中已存在的那个字符串对象。
   / String constStr2aaa / 还是只创建1个对象。由于常量字符串是在编译的时候就也被确定的又因aaa和bbb都是常量因此变 量str的值在编译时就可以确定。  这行代码编译后的与String straaabbb是一样的这与我们平时 好像不太一样啊一般使用“”连接两个字符串都会产生另一个新的字符对象。
   / String constStr3aaabbb //但如果先定义final字符串但未在定义处初始化而初始化在块中如下 //此时str1与str2相当于变量而不是常因为块是在运行时才能确定在编译时不能确定 final static String str9 final static String str10 static str9 aaa str10 bbb / 使用“”连接的两个字符串本身就是字面常量字符串时如果池中存在这样连接 后的字符串则是不会重新创建对象而是直接引用池中的字符串对象如果“”连接的两字符串中只要有一个 不是字面常量串即定义过的是会产生新的字符串对象。
    凡事也有例外这个也不例外如果“”连接的字 符串中两个或一个不是“字面常量”但如果定义成常量字符串时情况又有变化 param args / public static void mainString args String str1 aaa String str2 bbb String str3 aaabbb String str4 aaa bbb//不会产生新的字符串对象。
    。

类似问题换一批

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
JAVA相关
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
JAVA相关
数据库
C/C++
VB
C#/.NET
VC++
汇编语言
其他编程语言
JAVA相关
JAVA相关
举报
举报原因(必选):
取消确定举报