深度解析java数据类型

  java的内存可以分为栈内存和堆内存,堆内存负责保存new生成的对象的值。栈内存一般保存定义的变量或对象。当为一个对象定义成null时,相当于清除掉了该对象的引用,即堆内存保留的值就成了垃圾内存,等待JVM的回收。

1. 在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是引用类型。“==”是比较两个变量的值是否相等,“equals”是比较两个对象变量所代表的对象的内容是否相等。 因此"=="一般用在基本数据类型中,如int、boolean等;equals一般用在引用类型中,如String等。如下:

String a=new String("abc");
String b=new String("abc");
String c=a;

if(a==b)
{
 System.out.println("a==b");
}
else
{
 System.out.println("a!=b");  //输出该条
}


if(a==c)
{
 System.out.println("a==c");  //输出该条
}
else
{
 System.out.println("a!=c");
}

if(a.equals(b))
{
 System.out.println("a equals b");  //输出该条
}
else
{
 System.out.println("a not equals b");
}

2. String :引用类型。String类对象是一个常量对象。它在内存中的值是不可改变的。如String str="abc";str="def"。虽然str的值发生了变化,但是在内存中“abc”的值是存在的,一直等到垃圾回收或内存不够时,内存中的“abc”值才会消失。所以,在项目应用开发中,stri的值会经常发生变化,为节省内存空间一般用StringBuffer来代替String。StringBuffer直接可以修改内存中的值。

3. StringBuffer:默认长度是16个字符,随着字符数的增多,自动增长。它有一些比较重要的方法,如:capacity,返回类型:int,可以返回当前StringBuffer的容量。等等,详细见API。

4. 在Java中,传参时,都是以传值的方式进行。对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。
4.1 如下示例,对基本数据类型:
class StringTest
{
 public static void change(int x,int y)
 {
  x=x+y;
  y=x-y;
  x=x-y; 
 }
 public static void main(String[] args)
 {
  int x=3;
  int y=4;
  change(x,y);      
  System.out.println("x="+x);
  System.out.println("y="+y);
 }
}
我们可以看到输出的值:x=3,y=4;为什么调用了change方法,交换了x和y的值,可输出的结果还是没变呢?因此这就是“对于基本数据类型,传递的是数据的拷贝”最好的说法,我们可以用下图来表示:

从栈内存,我们可以看出,x和y的交换实际上是在change里面发生了改变。
4.2 对于引用类型,我们可以把引用看作对象的首地址,因此它copy的是首地址的引用。当引用类型的值发生变化时,原地址的值也就会化了。如下所示:
 public static void change(int[] num)
 {
  num[0]=num[0]+num[1];
  num[1]=num[0]-num[1];
  num[0]=num[0]-num[1];
 }

 int[] num=new int[]{3,4};
 change(num);
 System.out.println("x="+num[0]+","+"y="+num[1]);
输出的内容为:x=4;y=3

注:java中的八种数据类型,都各自对应了封装类的引用类型(如:Boolean,Byte,Short,Integer,Long,Character,Float,Double),可以相互之间转换。详见API。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值