内存分析 字符串Sting 今天进步好大

先来推荐几本图书《effective java》《左手是疯子,右手是天才》《java核心技术卷》

问题:保留小数点后后两位,并且四舍五入。

解题思路,先乘以1000,取整后相当于保留三位有效数字,并对位数+5.4以下的数字加5,不会超过9,4以下的数字+5,会进位。用以实现四舍五入。除以10后,把位数小数点后第三位舍去。

public void round1(double n){
  double a=n*1000+5; 
  int b=(int)(a/10);
  double c=(double)b/100;
  System.out.println(c);
}

栈的方法先进后出。栈与栈之间完全隔离的。方法中的传值都是copy一份。方法都是在栈区。对象都在堆区。Study d=new Study();d就是对象引用。一个类被new了,必然开空间。同一个类下产生的对象,是结构相似的对象。——《java核心技术卷2》 

一个对象可以被多个引用所引用,但是一个应用变量只能指向一个对象。

String类位于long包下,用""双引号。可以不用定义类型,不用new。字符串存放在堆区的串池中,长度不可变(内存空间不变)。String在java底层用的是char[]字符串。

问题:String ss=new String(“abc”);执行的时候有几个对象? 2个对象 “abc”在串池中一个对象。new出来必然在内存开空间。

问题:String ss=new String(“abc”);String s1="abc";执行的时候有几个对象?2个对象。串池中的相同内容只存在一份。new出来的开空间

问题:String在什么时候用?在String在长度不经常变的时候用。

问题。Stringbuff底层是怎么实现的?在内存中开一个16位的字符缓冲区。

java中国的对象是通过引用reference对其操作的。操作对象就是操作它的地址。
属性:new出来的属性,默认值其实都为NULL,char=‘/u0000’;
方法:java中方法参数传递只有值传递
成员变量和局部变量的作用域。局部变量必须初始化才能用。成员变量系统自动给初始化,局部变量系统不自动初始化。
栈:存放局部变量。自动分配连续的空间。后进先出
堆:存放new出来的对象。不连续
方法区:类的信息(代码)static变量 常量池(字符串常量)等

 

 

  

  

 

posted @ 2015-03-24 17:08  猴子要努力吃  阅读(209)  评论(0编辑  收藏  举报