`

Java 中数值变量赋值问题

    博客分类:
  • Java
 
阅读更多

 

写了一段判断数值相等判断方法的程序:

 

		//在-128~127 之外的数
		 Integer i1 = 200;
		 Integer i2 = 200;
		 System.out.println("i1==i2: "+(i1==i2));//false
		 // 在-128~127 之内的数
		 Integer i3 = 100;
		 Integer i4 = 100;
		 System.out.println("i3==i4: "+(i3==i4));//true
		 
		 Long l1 = 9L;//内存机制
		 Long l2 = 9L;
		 //实际上内存中l1只是一个long类型的变量,它存在于向stack(栈)中,数值并不在其中存放,
		 //它指向heap(堆)中另一块真正存放数值的内存,加L的目的就是为了让heap中也创建一块long类型所需要的内存,用来来放数值。
		 //所以说=前后两者其实是在不同的两块内存,只不过有个无形的指针将两者连接起来了。
		 System.out.println("l1 == l2: " + (l1 == l2));//true
		 //原因:http://www.2cto.com/kf/201305/215619.html
		 
		 Long t1 = new Long ("9");
		 Long t2 = new Long ("9");
		 //2个对象开辟的内存空间不同
		 System.out.println("t1 == t2: " + (t1 == t2));//false

 

 

结果:

i1==i2: false
i3==i4: true
l1 == l2: true
t1 == t2: false

 

看来Java 中的自动装箱/拆箱以及包装类变量赋值还是有些讲究的。

 

 i1, i2 不相等, i3,i4 相等的问题:

参考: http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html

为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;
想到, 我们循环时经常用到的i= 0, 和list.get(0) ,等情况, 小数值确实利用率很高, 这么做的内存利用得到提高是不少的.
l1和l2 对象的问题 ,  9L 在内存中也是分配到一个地址, l1 和 l2 是引用同一个 9L  的,这点的机制和String 是一样的, 相同字符串常量的内存都是存放在堆中,
 t1 和 t2 分别创建了2个不同的内存对象, 其内存地址不同.
分享到:
评论

相关推荐

    java基本语法—字符串与数值型数据转换、从键盘输入数据

    本实验报告主要讲述了 Java 基本语法中字符串与数值型数据转换、从键盘输入数据的相关知识点。下面是本实验报告的详细内容: 一、实验目的 在本实验中,我们将学习掌握流程控制中的 if 条件语句、for 循环语句、...

    Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue

    Java中常量的分类: 1,整数常量。所有整数 2,小数常量。所有小数 3,布尔(boolean)型常量。较为特有,只有两个数值。true false。 4,字符常量。将一个数字字母或者符号用单引号( ' ' )标识。 5,字符串常量。...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

    这些是Java语法和基本概念的核心内容 熟悉和理解这些概念将为您编写和理解Java程序打下坚实基础

    2. **变量**:在Java中,变量用于存储数据。在声明变量时,需要指定变量的数据类型,如int、double、boolean等。变量可用于存储数值、字符、布尔值等各种类型的数据。 3. **数据类型**:Java提供了两种数据类型:...

    第 3 次JAVA上机 报 告

    (2) 为myValue对象中的value域赋值10 (3) 使用getValue()方法获得myValue对象中的数据并将它们打印在屏幕上 class MyValue { private int value; public void setValue(int x) { value=x; } public...

    Java初级实例:基本数据类型及操作代码.rar

    JAva基本的数据类型和基本操作相关源代码打包,像一些标识符、变量、赋值语句和赋值表达式、算术运算符、数值类型转换、字符数据类型及其运算、特殊字符的转义序列表示、字符型char数据与数值型数据之间的转换、从...

    Java变量、标识符、数据类型及其转换

    Java变量、标识符、数据类型及其转换一、变量的概念二、Java常用数据类型(1)数值(2)非数值三、不同进制的整数四、基本运算符五、类型转换问题 一、变量的概念 variable — 变量是程序执行时,内存中的存储单元. ...

    JAVA机试题库

    在这道题目中,我们需要使用 Java 的基础语法,例如变量声明、赋值、运算符等。同时,我们还需要使用浮点数运算来计算分数的值。最后,我们使用 for 循环来遍历从 1 到 100 的所有整数,并计算相应的分数值。 2. 从...

    java的八大基础数据类型

    char 属于 Java 中的字符型,占 2 字节(16bit),可以赋值单字符以及整型数值,变量初始化无默认值。包装类为 Character。 例如:char a = 'a';char a = '中';char a = 12; // 取值范围 0~65536,因为 char 类型在...

    Java中各个数据类型之间的转换

    由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。 转换规则 从存储范围小的类型到存储范围大的类型。 具体规则为: byte→short(char)→int→long→float→...

    java综合试题(面试题)

    13. Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为哪两种具体类型,各占二进制的多少位? 16.字符串 ”\’a\’” 的长度是( )3 13. float 32位、double 64位 24.表达式2*5/2.5、1.0/2*5、...

    Java复习题

    基本程序设计中,变量声明是告知编译器根据数据类型为变量分配合适的内存空间,变量在使用前必须被赋值。命名常量是来表示从不改变的永久数据,final int SIZE=20;小写字母命名变量和方法类:每个单词的首字母大写...

    java三大特性说明

    清楚说明了java三大特性: 抽象:处理各种问题的第一步,把具体的问题与解决问题的方法结合起来,这就是抽象的过程.  Java常见的访问控制修饰符:  Public :到处都可以访问,不受包和父子类关系的限制  默认: 只...

    Java基础知识之数据类型和操作符

    Java是一种强类型语言,这意味着在Java中,每个变量都必须先声明其数据类型,然后才能使用。Java的数据类型可以分为两类:基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double和...

    java初学者必看

    3.5.2 变量赋值和初始化 3.5.3 常量 3.6 类型转化 3.6.1 数值类型之间的转换 3.6.2 强制类型转换 3.7 运算符 3.7.1 算术运算符 3.7.2 关系运算符 3.7.3 逻辑运算符 3.7.4 位运算符 3.7.5 自动递增和递减 ...

    语言程序设计资料:java-《Java语言程序设计》期末复习题.doc

    34. Java中的String类的对象既可以是字符串常量,也可以是字符串变量。【正确】 35. 容器是用来组织其他界面成分和元素的单元,它不能嵌套其他容器。【正确】 二、选择题 1. 关于被私有保护访问控制符private ...

    Java学习笔记(必看经典)

    在简单变量中存放的是数值。 可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法: public student(string name,int a){ } public student(int a,string name){ } 为两个...

    Java数组的经典算法和应用

    System.out.println("最大值为数值中的第"+maxindex+"个数。"); //排序使用双重循环 冒泡排序,从小到大派寻 for(i=1;i;i++) { for(j=0;j;j++) { if(a[j]>a[j+1]) { int temp;//临时...

    java经典面试2010集锦100题(不看你后悔)

    A) 定义接口的关键字为interface,接口中可以定义变量,但是必须同时为该变量赋值,接口中的方法默认全部为public类型。 B) 实现接口的关键字是implements,其后可以跟多个接口的名字,即实现多继承。一个类实现了...

    java范例开发大全源代码

     实例154 使用静态成员变量计算内存中实例化的对象数目 239  实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  ...

Global site tag (gtag.js) - Google Analytics