关于java中的存储问题
新手感悟……
就个人理解,java中分为基本数据类型还有对象。对于基本数据类型。在赋值操作中传递的是值,而不是引用。例如
int a = 10;
int b = a;
int b = 11;
这时,输出a,b可以发现。a = 10 ,b = 11;在b = a这个赋值操作中,是将a对应的值传递给了b。而不是将b的引用指向了a的。当然,问题来了。这里说,a与b在赋值操作后并不是指向相同的内存地址。那为什么会存在 a == b 为真的情况呢?这里的话,应该是在内存中有一部分空间来单独存放了java中的基本数据类型值。当有类似于int I = 10;的赋值操作的时候,指向的对10在内存中地址的。所以a,b是指向相同的内存地址的。
关于String,是个很奇怪的对象。我们可以通过下面的代码发现:
String a = "111";
String b = new String("111");
System.out.println(a == b);
System.out.println(a.equals(b));
a = b;
String c = new String("111");
System.out.println(a == c);
System.out.println(a == b);
这里输出的值是
false
true
false
true
这说明了一个问题。当String进行赋值操作之后变成了与int相同的情况。但是通过new生成的确是不同的。当String被new 之后,是以char[]的形式存储在内存中的。与整型相同,char也是基本类型。所以String在内存中生成了一个新的char[]。但是赋值之后,便指向了相同的内存空间。
对于对象。应该要分成两个部分。当对象被new之后。有两个存在。存在于内存堆中的是对象的实体。包括所有对象中存储信息。在栈中,存在一个对该实体的引用。即指向该内存地址的引用。当赋值操作时,传递是的是依然是值,只不过这个值是对于内存实体对象的引用。类似于两个指向同一个内存区域的指针。当其中一个发生变化的时候(直接复制),改变的仅仅是在栈中的引用地址。并不会直接影响到内存堆中存储的数值。
这种存储体是很常见的。除开基本类型之外的,都是。包括int[]还有char[]等。
现在我们可以设想这样一个问题;
一个List中存了1个int,1个Strin
相关文档:
Java线程同步机制synchronized关键字的理解
关键字: 线程 synchronized
文章出处:http://tech.it168.com/j/2008-01-30/200801302324557.shtml
作者:来自ITPUB论坛
线程同步:
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了 ......
java中常用的数据转换
前些天在项目中遇到了Calender和Date的相互转换问题,然后就查了一些资料。整理了一些相关的常用转换,和大家分享下:
1. Java包装类:在介绍具体的数据类型转换之前,我们有必要先介绍java中的一个特殊的拆装箱类型----java包装类。
• Java包装类出现的目的:为了能够使java程序员可以将ja ......
测试环境:
SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0
OS:WINDOWS7
外设:串口条形码扫描枪
Server:Tomcat6
看了网上良莠不齐的关于Applet访问串口的文章,总结起来所关注的问题无外乎以下3个:
1. 三个文件(comm.jar、javax.comm.properties和win3 ......
下面的程序将打印一个单词,其第一个字母是由一个随机数生成器来选择的。请描述该程序的行为:
import java.util.Random;
public class Rhymes {
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(2)) {
......
如何用JAVA 对象?
写简单下给我看下 谢谢了
创建类 名字 =new 设String 几个都可以。 在用复制 输出
在下面继续创建类 后面最好标注上//这样看起来简单下谢谢了
求解决 类和对象没学明白老师讲的我糊涂 迷糊做不出来。 ......