热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在整数/Double/Float数字用法的情况下,java是否使用内存

如何解决《在整数/Double/Float数字用法的情况下,java是否使用内存》经验,为你挑选了1个好方法。

我正面临一个混乱的希望,任何人都可以回答.请参阅下面的代码

for(int i = 0; i <40; i++){
    if(i <20){  //Does this 20 here is initialized again and again
       System.out.println("less than 20");
    }else{
       System.out.println("greater than 20");
    }
}

所以我的问题是:i <20中的20是否会一次又一次地初始化为一个整数,导致一次又一次地分配内存,或者java是否使用类似于它用于字符串的STRING POOL这样的概念.

根据知识它需要记忆,但我仍然想确定.原因是:

我正在研究一个性能过于密集的代码,因此我无法在其中添加条件代码.像下面的东西

 for(int p = 0; p <10; p++){
            if(p <20){
                System.out.println("ABC");
            }
            if(p <20 && "SomeValue".equals("SomeValue")){
                System.out.println("SomeValue");
            }
            if(p <20 && "ABC".equals("ABC")){
                System.out.println("ABCDEF");
            }
        }

所以,如果答案是肯定的,那20就占用了内存,那么我可以使代码如下所示

 int value = ("Coldrink".equals("coca cola"))?10:20;
        for(int p = 0; p <10; p++){
            if(p 

正如你所看到的那样,变量值被初始化一次并且我已经放置了我自己的条件,这可能会有一些性能问题,但后来我减少了内存消耗,这可能会使事情变得平稳.

编辑:谢谢@TJ克劳德让我的困惑得到澄清.有相同问题的人请阅读已接受的答案以及点击此资源



1> T.J. Crowder..:

是否20i <20被初始化为整数一次又一次一次又一次引起的内存分配或不Java使用类似有点像它使用字符串一个字符串池的概念.

都不是.这20是一个原始int值 - 不是Integer实例 - 它在字节码中被硬编码并加载到用于比较操作的寄存器中.不需要像字符串实习池这样的东西,也不需要每次迭代都有新的分配.

我们可以通过将该循环放在一个main示例类中来看到这一点:

public class Example {
    public static void main(String[] args) {
        for(int i = 0; i <40; i++){
            if(i <20){  //Does this 20 here is initialized again and again
               System.out.println("less than 20");
            }else{
               System.out.println("greater than 20");
            }
        }
    }
}

...然后编译它,并通过javap -c Example以下方式查看字节码:

Compiled from "Example.java"
public class Example {
  public Example();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0
       1: istore_1
       2: iload_1
       3: bipush        40
       5: if_icmpge     39
       8: iload_1
       9: bipush        20
      11: if_icmpge     25
      14: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      17: ldc           #3                  // String less than 20
      19: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      22: goto          33
      25: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      28: ldc           #5                  // String greater than 20
      30: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      33: iinc          1, 1
      36: goto          2
      39: return
}

请注意偏移9和11处的粗体操作.


推荐阅读
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • KVC:Key-valuecodingisamechanismforindirectlyaccessinganobject’sattributesandrelations ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • Project2.cpp:定义应用程序的入口点。#includeframework.h#includeProject2.h#defineMAX_LOADSTRING100全 ... [详细]
author-avatar
胖蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有