Java语言个人学习总结1

1.Java中栈区里面的数据是共享的,但是不同与C语言里面的多个指针指向同一个变量可以修改变量值,在Java中,当定义一个变量时候,编译器会首先去查找该变量的值是否存在于栈区,如果有,直接将变量的引用指向该值,否则新创建一个值并让变量指向它。

		Person p1=new Person("zhou");
		Person p2=new Person("dante");
		p2=p1;
		p2.name="turn";
		System.out.println(p1.name);
		System.out.println(p2.name);

int a=3;int b=3;//a,b同时指向3 a=5;System.out.println(b);//输出为3</textarea>

所以当修改某个变量的值的时候(a=5),就会改变原引用的指向(a:3->5),但是不会影响其他的指向原值的引用(b=3);

2.Java中内存分为堆内存(new出来的对象放在这里)和栈内存(基本数据类型创建的变量都放在这),栈内存的变量的存取比堆内存快。

3.字符串的创建,一种是从字符串池创建(String s=“abc”;),另一种是从堆创建(String s=new String("abc");)

  • 字符串池的速度快,每个串都是唯一的,如果定义的对象已经位于串池,直接将变量引用指向该串,不创建新的串;否则创建新的串,并将变量引用指向该串;
<textarea readonly="readonly" name="code" class="java"> 
String a="csdn";
String b="csdn";
System.out.println(a==b);//输出为true,
</textarea>

//“==” 用来比较变量的引用是否相同;  “equals()” 方法使用来比较变量引用里面的内容是否相同;

输出值为“true”说明他们的引用是相同的,也就是说,串池里面的每个内容是唯一的

  • 堆创建,会首先检查字符串池里面是否存在,如果有,直接复制到堆内,否则,在堆内创建一个串;
<textarea readonly="readonly" name="code" class="java"> 

String a=new String("csdn");
String b=new String("csdn");
System.out.println(a==b);//输出false  L1
System.out.println(a.equals(b));//输出true  L2
</textarea>
堆内存创建的每个串,都是不同的对象,它们可能内容相同(L2),但是每个引用都指向不同的对象(L1);

<textarea readonly="readonly" name="code" class="java">
String a=new String("csdn");
String b="csdn";
System.out.println(a.equals(b));//输出为true  L2
</textarea>
使用不同的方式创建串,即使引用指向的内容是相同的(L2),引用也不会相同(L1)


4.从堆内存创建的变量(new 出来)会产生和指针一样的效果,如果多个引用指向同一个值,那么只要是其中一个改变了该值,其他引用的值会跟着改变
<textarea readonly="readonly" name="code" class="java">		
		Person p1=new Person("zhou");
		Person p2=new Person("dante");
		p2=p1;
		p2.name="turn";
		System.out.println(p1.name);//输出turn
		System.out.println(p2.name);//输出turn
</textarea>




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值