java怎么动态的往一个Long数组里加入Long元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么动态的往一个Long数组里加入Long元素相关的知识,希望对你有一定的参考价值。

比如Long[] l; 然后动态的往这个没有定义大小的l里添加Long类型的数据。怎么添加。

String[] abc = "123", "234", "345";

Long[] num = new Long[abc.length];

for (int idx = 0; idx < abc.length; idx++)

num[idx] = Long.parseLong(abc[idx]);

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。

由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。

由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。

参考技术A public void test(int x)
Long[] l = null;
l = new Long[x];
for(int i = 0, j = l.length; i < j; i++)
l[i] = Long.parseLong(Integer.toString(i));

给参数动态定义大小,然后使用循环赋值,大致思路就是这样子

本回答被提问者采纳
参考技术B 往Long数组中添加数据和Int一样,在长度不超过界限的情况下,使用数组下标给数组赋值(添加)
如: long[] a =new long[5]; a[0]=123123L;
数组一旦初始化,长度就是不可变的,只能在数组的长度限制之内去添加,如果超出界限就会抛出
ArrayIndexOutOfBoundsException 数组越界异常
参考技术C 不明白你说的动态是什么意思,如果你需要在任意位置插入或者随时改变长度,那你为啥不用List之类的类型,为啥一定要用数组呢 参考技术D java没有动态给已存在的数组添加空间的,实现动态添加用集合的

怎么将long类型转换为string类型

一、问题描述
最近在改造内部管理系统的时候, 发现了一个巨坑,就是前端 JS 在获取后端 Long 型参数时,出现精度丢失!

起初,用 postman 模拟接口请求,都很正常,但是用浏览器请求的时候,就出现问题了!

问题复现

打开浏览器,请求接口,结果如下!

用 postman 模拟接口请求,结果如下!

刚开始的时候,还真没发现这个坑,结果当进行测试的时候,才发现前端传给后端的ID,与数据库中存的ID不一致,才发现 JavaScript 还有这个天坑!

由于 JavaScript 中 Number 类型的自身原因,并不能完全表示 Long 型的数字,在 Long 长度大于17位时会出现精度丢失的问题。

当我们把上面的用户 ID 改成 19 位的时候,我们再来看看浏览器请求返回的结果。

浏览器请求结果!

当返回的结果超过17位的时候,后面的全部变成0!

二、解决办法
遇到这种情况,应该怎么办呢?

第一种办法:在后台把 long 型改为String类型,但是代价有点大,只要涉及到的地方都需要改
第二种办法:使用工具进行转化把 long 型改为String类型,这种方法可以实现全局转化(推荐)
第三种办法:前端进行处理(目前没有很好的办法,不推荐)
因为项目涉及到的代码非常多,所以不可能把 long 型改为 String 类型,而且使用 Long 类型的方法非常多,改起来风险非常大,所以不推荐使用!

最理想的方法,就是使用aop代理拦截所有的方法,对返回参数进行统一处理,使用工具进行转化,过程如下!

2.1、Jackson 工具序列化对象
我们可以使用Jackson工具包来实现对象序列化。

首先在 maven 中添加必须的依赖

编写一个转化工具类JsonUtil

紧接着,编写一个实体类Person,用于测试

最后,我们编写一个测试类测试一下效果

输出结果如下:

其中最关键一行代码,是注册了这个转换类,从而实现将所有的 long 变成 string。

如果想对某个日期进行格式化,可以全局设置。

也可以,单独对某个属性进行设置,例如对createTime属性格式化为yyyy-MM-dd,只需要加上如下注解即可。

工具转化类写好之后,就非常简单了,只需要对 aop 拦截的方法返回的参数,进行序列化就可以自动实现将所有的 long 变成 string。

2.2、SpringMVC 配置
如果是 SpringMVC 项目,操作也很简单。

自定义一个实现类,继承自ObjectMapper

在 SpringMVC 的配置文件中加上如下配置

2.3、SpringBoot 配置
如果是 SpringBoot 项目,操作也类似。

编写一个WebConfig配置类,并实现自WebMvcConfigurer,重写configureMessageConverters方法

三、总结
在实际的项目开发中,很多服务都是纯微服务开发,没有用到SpringMVC,在这种情况下,使用JsonUtil工具类实现对象序列化,可能是一个非常好的选择。
参考技术A 1
2
3
4
5
6
7

两种方法:
一、使用String类的方法,String.valueOf(),比如:
long aa = 123;
String a = String.valueOf(aa);
二、最简单的直接将long类型的数据加上一个空串
long aa = 123;
String a = aa+"";本回答被提问者采纳

以上是关于java怎么动态的往一个Long数组里加入Long元素的主要内容,如果未能解决你的问题,请参考以下文章

java怎么定义一个二维数组?

Java中有啥方法能使大于long 的两个数相乘???

在java里,一个long型的,怎么计算成时分秒

java中long型怎么比较大小

无法在 c 中初始化数组 |警告:从 long 转换为 long unsigned

怎么将long类型转换为string类型