Parameter... parameter

本文详细解析了Java中可变参数的用法,包括如何使用它们来处理字符串数组,以及如何正确地获取数组长度和元素值。通过实例代码演示了字符串数组和可变参数的区别,并提供了处理空值和基本数据类型的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到如上所示的参数,当时就懵了。。。

如果,您已经很熟悉这种参数表示形式的话,对您来说阅读这篇文章是在浪费生命。

在说本篇文章主题之前,先扯会淡,且看!

public class Ubuntu {
	
	public static void main(String[] args) {
		String str = "";
		System.out.println("str.length(): " + str.length());
		
		String[] strArrays  = new String[]{""}; 
		System.out.println("strArrays.length(): " + strArrays.length);
		System.out.println("strArrays[0].length(): " + strArrays[0].length());
	}
}
这里主要想说明两个问题:

1. 判断字符串 String 的长度可以使用方法 length(), 判断字符串数组 String[] 的长度可以使用属性 length

2. ""对于字符串来说长度为0,但是对于数组来说表示字符数组中有一个长度为0的元素。

主角开始上场,实例代码如下:

public static void getInfo(String... str) { //可变参数
	int len = str.length;
	if(len <= 0) {
		System.out.println("params's len is ZERO!");
	} 
		
	for(int i=0; i<len; i++) {
		System.out.println("str = " + str[i]);
	}
} 

由上面,可以看出

String... str 表示字符串数组,而不是字符串。因为调用 str.length 而不是调用 str.length()。

测试代码,如下:

public class Ubuntu {
	
	public static void main(String[] args) {
		getInfo("mark");
		getInfo(new String[] {"simon", "amy", "jack", "mark"});
		getInfo();
		getInfo("");
	}
}
显示结果:

str = mark
str = simon
str = amy
str = jack
params's len is ZERO!
str = 
其中,params's len is ZERO!是 getInfo()的结果。str = 是getInfo("")的结果。

修改代码,如下:

public static void getInfo(String... str) { //可变参数
	if(str == null) {
		System.out.println("params is NULL!");
	} else {
		int len = str.length;
		if(len <= 0) {
			System.out.println("params's len is ZERO!");
		} 
			
		for(int i=0; i<len; i++) {
			System.out.println("str = " + str[i]);
		}
	}
}
public static void main(String[] args) {
	getInfo(null);
}
结果:
params is NULL!

那么,是否支持基本数据类型呢?看下面代码,你就会明白啦???!!!

public static void getAge(int... num) {
	if (num == null) {
		System.out.println("params is NULL!");
	} else {
		int len = num.length;
		if (len <= 0) {
			System.out.println("params's len is ZERO!");
		}

		for (int i = 0; i < len; i++) {
			System.out.println("num = " + num[i]);
		}
	}
}
public static void main(String[] args) {
	getAge(1);
	getAge(2, 3);
	getAge();
	getAge(null);
}
显示结果:
num = 1
num = 2
num = 3
params's len is ZERO!
params is NULL!

ok,现在应该明白 Parameter... parameter 形式参数的含义了吧,就是用来表示可变数组,数组的类型不仅可以是引用类型还是基本数据类型。

<think>我们正在处理一个关于RK3566芯片的parameter.txt配置文件的问题。根据提供的引用内容,我们可以尝试从几个方面来解答:1.**引用[1]和[4]**:提到了在RK3566的buildroot系统中进行编译,以及泰山派界面的根目录文件制作。这暗示了parameter.txt文件可能位于SDK的某个目录中,或者是在制作根文件系统时涉及的配置文件。2.**引用[3]**:提到了挂载根文件镜像并拷贝文件系统的过程。这里可能涉及到了将编译好的文件系统(包括配置文件)打包到镜像中,因此parameter.txt可能存在于根文件系统的某个位置。3.通常,在Rockchip平台的开发中,parameter.txt(或parameter文件)是一个重要的分区表配置文件,它定义了各个分区(如boot、rootfs等)的大小和位置。这个文件一般位于SDK的device/rockchip/rk356x/目录下,或者在编译时由打包工具使用。根据以上信息,我们可以推断:-在RK3566的SDK中,parameter.txt文件可能位于`device/rockchip/rk356x/`目录下,或者是在板级配置目录(如`device/rockchip/<board_name>/`)中。-在编译过程中,这个文件会被打包到固件中,最终烧录到设备的特定分区(通常是parameter分区)。由于用户没有提供具体的SDK路径,我们可以建议用户按照以下步骤查找:1.在RK3566的SDK根目录下,查找`device/rockchip/rk356x/`目录,看是否有parameter.txt或类似名称的文件。2.如果找不到,可以尝试在SDK中搜索名为`parameter.txt`的文件,或者使用通配符搜索`parameter*`。3.另外,在编译过程中,打包脚本(如`mkimage.sh`或`build.sh`)可能会指定parameter文件的路径,可以查看这些脚本。如果用户已经编译过系统,那么生成的固件包中可能包含parameter文件。例如,在Buildroot的输出目录(如`output/rockchip_rk3566/images`)中,可能会有`parameter.txt`。**注意**:不同的开发板(如泰山派)可能会有自定义的parameter文件,因此需要根据具体的开发板型号在相应的目录下查找。如果用户需要示例,我们可以提供一个典型的RK3566parameter.txt文件内容:```FIRMWARE_VER:1.0MACHINE_MODEL:RK3566MACHINE_ID:007MANUFACTURER:ROCKCHIPMAGIC:0x5041524BATAG:0x00200800MACHINE:0xffffffffCHECK_MASK:0x80PWR_HLD:0,0,A,0,1TYPE:GPTCMDLINE:mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x00020000@0x0003a000(oem),0x00040000@0x0005a000(rootfs),-@0x0009a000(userdata)```以上内容仅供参考,实际内容需要根据具体的硬件配置和分区需求进行修改。如果用户无法找到,建议查阅RK3566的SDK文档或联系板卡供应商获取。§§相关问题§§1.RK3566的parameter.txt文件通常位于SDK的哪个目录?2.如何修改RK3566的分区表?3.RK3566的固件打包流程是怎样的?4.在Buildroot系统中,如何配置分区表?</think>根据引用内容,RK3566的`parameter.txt`配置文件是Rockchip平台固件烧录的关键分区表文件。以下是关键信息整理: ### 一、`parameter.txt`的核心作用 1. **分区表定义**:定义eMMC/NAND闪存的分区布局,包含`uboot`、`boot`、`rootfs`等分区起始地址和大小 2. **固件标识**:包含固件版本、设备型号等元数据(如`FIRMWARE_VER: 1.0`) 3. **内核参数**:通过`CMDLINE`字段传递内核启动参数(如`mtdparts`分区方案) ### 二、典型文件位置 1. **SDK路径**:在RK3566的Buildroot SDK中通常位于: ```bash device/rockchip/rk356x/parameter.txt # 通用路径 tspi_linux_sdk_repo_20240131/parameter-buildroot.txt # 泰山派示例路径[^4] ``` 2. **固件打包路径**:编译后出现在固件镜像同级目录: ```bash output/rockchip_rk3566/images/parameter.txt # Buildroot输出目录[^1][^4] ``` ### 三、配置文件示例 ```ini FIRMWARE_VER: 8.1 MACHINE_MODEL: RK3566 MACHINE_ID: 007 MANUFACTURER: ROCKCHIP MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 0xffffffff CHECK_MASK: 0x80 TYPE: GPT CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x00020000@0x0003a000(oem),0x00040000@0x0005a000(rootfs),-@0x0009a000(userdata) ``` ▸ **关键字段说明**: - `CMDLINE`:定义Linux内核识别的MTD分区表 - `rootfs`:根文件系统分区(Buildroot系统所在分区) - `boot`:内核和dtb存放分区 - 分区大小单位:`0x00010000 = 64KB`(十六进制) ### 四、操作实践 1. **修改分区表**: ```bash vi device/rockchip/rk356x/parameter.txt # 编辑分区布局[^1] ``` 2. **打包固件**: ```bash ./build.sh # 生成含新parameter的固件 ``` 3. **烧录验证**: ```bash upgrade_tool ul parameter.txt # 通过Rockchip烧录工具写入 ``` ### 五、调试技巧 通过串口查看启动日志验证分区加载: ``` [ 0.381112] Creating 9 MTD partitions on "rk29xxnand": [ 0.386115] 0x000000000000-0x000000040000 : "uboot" [ 0.391203] 0x000000040000-0x000000060000 : "trust" ... [ 0.421779] 0x0000005a0000-0x0000009a0000 : "rootfs" # 根文件系统分区 ``` [^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值