zoukankan      html  css  js  c++  java
  • string的一些特殊点

    无论是String还是new String最终都指向了String constant pool中,只不过是String直接指向了Stringconstant pool中。而new String是在Heap中创建了一个指向String constant pool中的引用。
    java中,如果定义了String类型的字符串,最终的都存在String constant pool 中。

    String constant pool就是jvm规范中所谓的方法区。

    一个对象由对象头,对象实际数据,以及对齐填充(可能存在)三部分组成。

    new一个对象会有两个东西占用内存,引用和实例。

    new一个Object对象占用24个字节(64位) 或 12个字节(32位)

    在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此不用担心String对象共享而带来程序的混乱。

    String str = new String("abc"); 创建了几个对象?

    一个或两个:abc 字符串之前没有用过,这毫无疑问创建了两个对象,一个是new  String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象。

          如果之前创建了‘abc’字符串,则只创建了一个对象。

    创建一个类的实例(对象)的方法有以下两种:
    一、使用new创建对象。
    二、调用Class类的newInstance方法,利用反射机制创建对象。

    string比较特殊,有第三种方式,

    String str="abc";

    这种方式是String特有的,并且它与new的方式存在很大区别。

    String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

    栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
    堆(heap):用于存储对象

  • 相关阅读:
    关于IOS6屏幕旋转的问题
    学习备忘录
    关于多种手势问题
    关于 IOS中 绘制图形的问题
    爱的意义
    IOS支付SDK
    IOS开发特别备注
    ios相关教程
    iOS7光标问题
    收藏网站
  • 原文地址:https://www.cnblogs.com/wskb/p/10949936.html
Copyright © 2011-2022 走看看