小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

你真的了解变量吗?

Code Tools,开发语言 额外说明

收录于:15天前

变量是编程语言中最基本的术语,用来指计算机中存储的可变数据——例如整数、小数、字符或称为内存空间。

变量可以存储不同的变量类型,如整数、布尔类型、对象、数组等。每个变量对应内存中的一个内存地址,但如果变量存储的是原始数据类型(整数、布尔值、字符串),则其值变量的值存储在栈内存中,而相比那些更复杂的数据类型(数组、对象),栈中只存储一个固定长度的地址,这个地址指向堆内存中的值。 。这是由于栈和堆这两种数据结构的性质决定的。

在这里插入图片描述

变量的使用一般包括变量定义、变量调用、变量值传递、变量销毁和内存释放。

变量可以是任何数据类型、数字、字符串、方法、对象等。变量的定义归结为不同语言的语法,例如:

//java

//简单数据类型
String name = "_小许_";
String name = null;

int age = 21;
boolean flag = true;

//复杂数据类型对象
class Person{
    
	String name;
	Integer age;
}

Person person1 = new Person();


# python
a = 10
b = "_小许_"

# 函数变量
def showName:
	print("_小许_")

# 对象变量
class Person:
    def __init__():
        print("_小许_")

Person.__init__()
// go
var x int =10
y := "_小许_"
const name = "_小许_"

//结构体变量
type Person struct {
    
	name string
	age int
}


变量的销毁是由语言编译器或解析器的GC完成的。

变量的传递是变量的核心。定义变量是为了传递给不同的方法来实现不同的操作,最终得到用户需要的结果。

变量的传递包括值传递和引用传递,这也与语言的特性密切相关。值传输是浅层传输,引用传输是深度传输。前者是值的简单复制,后者是对内存地址的引用,通常通过修改指针变量来完成。

传递变量的方式。变量一般包括局部变量和全局变量。变量最终通过IO输出并在内存中销毁,因此变量只有在编译时才有意义。

一般来说,方法是程序中对变量实现附加操作的主体。算术运算、逻辑运算等一般也附加在方法上。无论是面向对象语言还是过程语言。

例如,在过程语言 c 中:

#include <stdio.h>
int sum(){
    
    int i, sum=0;
    for(i=1; i<=100; i++){
    
        sum+=i;
    }
    return sum;
}
int main(){
    
    int a = sum();
    printf("The sum is %d\n", a);
    return 0;
}
//java

public class Main {
    

    public static void main(String[] args) {
    
	// write your code here
        NumUtil un = new NumUtil();
        int sum = un.sum();
        System.out.println(sum);
    }
}


class NumUtil{
    
    private int tmp = 0;
    public int sum(){
    
        for (int i =0 ;i<=100;i++){
    
            tmp = tmp + 1;
        }
        return tmp;
    }
}

在上面的传递方法中,方法中有一个默认值作为初始值,也可以自定义初始值:

public class Main {
    

    public static void main(String[] args) {
    
	// write your code here
        NumUtil un = new NumUtil();
        int sum = un.sum();
        System.out.println(sum);
    }
}


class NumUtil{
    
    private int tmp = 0;
    public int sum(int a){
    
    	tmp = a;
        for (int i =0 ;i<=100;i++){
    
            tmp = tmp + 1;
        }
        return tmp;
    }
}

sum(int a)中传递了一个名为a大的变量,在其数据类型是int,那么在调用该函数时传递的参数就必须时int类型。

不同语言的规范不一样,定义的规则也一样,传递的规则也是。例如,在C语言中int i;就是表示定义了一个int内置类型的变量,名称为i;在Java中String name就是定义了一个名为name的String类型;这些是强类型语言的定义,像js,python等弱类型语言的定义方式又不一样a = 1是python定义变量的方式,a可以是是任意类型,最终类型又开发者赋予的值类决定。在js中提供了val,let,const定义局部和全局变量,且也是自动类型推断。在许多后来的语言中都有局部变量和全局变量的关键字定义,例如在scala中,var a :String = "_小许_"等等。

以下是常见的变量定义:

//c语言变量定义
int i, sum=0;

//变量传递


//java
String name = "";
# python
a = 0;
//go
a := 0

强类型语言中函数的定义必须声明类型,比如在函数中定义局部变量,在函数的参数中定义变量。在类型化语言中,定义变量不需要声明类型,但它必须有一个初始值。 ,类型由编译器或解析器推断。

有些语言如Scala提供了var,val等一些关键字,Go的var,const关键字来区别于局部变量和常量,这些只在方法体内生效。(方法的参数是方法的一部分,不能使用这些关键字)。

一般来说,函数变量可以分为:局部变量、全局变量、形式变量。

  • 函数内定义的变量称为局部变量
  • 在函数外部定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

在函数体中声明的变量称为局部变量。它们的作用域仅在函数体内。函数的参数和返回值变量都是局部变量。局部变量并不总是存在。它仅在定义它的函数被调用之后才存在。该局部变量将在函数调用结束后被销毁。

//go
func addNum(a int,b int) int{
    
	y := 3*a+4*b;
	return y
}
//java
public class Util{
    
	public int addNum(int a,int b){
    
		int y = 3*a + 4*b;
		return y;
    }
}

y 都是局部变量。

在函数外部声明的变量称为全局变量。全局变量只需要在一个源文件中定义,并且可以在所有源文件中使用。有的语言变量必须在类中定义,比如Java,有的语言可以在源文件中定义,比如Go。外部包中使用的全局变量首字母必须大写。

//go语言
package main
import "fmt"
//声明全局变量
var c int
func main() {
    
    //声明局部变量
    var a, b int
    //初始化参数
    a = 3
    b = 4
    c = a + b
    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}
//java
public class Person{
    
	private int id;
	private String name;
	private Double price;
}

定义函数时,函数名后括号内的变量称为形参(简称形参)。形参只有在函数调用时才会生效,函数调用完成后就会被销毁。当函数没有被调用时,函数的形参不占用实际的存储单元,没有实际值。

//go
func operation(n int, m int) (int, int, int, int) {
    
	return n + m, n - m, n * m, n / m
}
//java
public class Person{
    
	private int id;
	private String name;
	private Double price;
	
	public void setId(int id){
    
		this.id = id;
	}
	public int getId(){
    
		return this.id;
	}

	public void setName(String name){
    
		this.name = name;
	}
	public int getName(){
    
		return this.name;
	}

	public void setPrice(Double price){
    
		this.price = price;
	}
	public Double getPrice(){
    
		return this.price;
	}
}
. . .

相关推荐

额外说明

Springboot配置监听器、过滤器和拦截器

监听器:listener是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件。监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理。

额外说明

安装qt时崩溃退出的解决办法

第一步: 下载到比如d盘的在线安装包 d:\ qt-unified-windows-x64-online.exe 第二步:在运行cmd,以管理员权限启动 set path=d:\qt-unified-windows-x64-online.exe &&

额外说明

SpringCloud学习笔记-gateway网关自定义全局过滤器

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件: 参数中是否有authorization, authorization参数值是否为admin 如果同时满足则放行,否则拦截 实现: 在gateway中定义一个过滤器: package cn.

额外说明

【Python入门教程】第42章 字典推导

本篇我们将会介绍如何利用字典推导式(dictionary comprehension)对字典元素进行变换和过滤。 字典推导式简介 字典推导式可以针对字典执行一个 for 循环,对每个元素执行某些操作(例如变换或者过滤),然后返回一个新的字典。 与 for

额外说明

PostgreSQL生成建表语句

参考博文:https://blog.csdn.net/xiaofengtoo/article/details/84395199 修复了其函数中的bug,支持生成包含:字段(支持数组类型字段)、约束、索引(支持生成唯一索引,支持全类型索引)在内的建表语句。

额外说明

Spring第七阶段:基于xml配置文件的自动注入Bean的生命周期

1、基于xml配置文件的自动注入 自动注入,就是自动的给子对象赋值. 先创建Person类和Car类 public class Car { private String name; public class Person { private

额外说明

【Python】Windows:Airtest IDE 下载与安装

目录 一、功能简介 二、官网下载  三、解压安装 一、功能简介 Airtest IDE 是一款支持多种移动设备自动化测试的开发工具 可以通过 Python 脚本操控模拟器或真机操作 支持 UI 自动化测试、性能测试、Monkey 测试等多种测试方式 在性

额外说明

Greenplum【集群搭建 01】局域网 CentOS 7.9.2009 环境 GreenPlum 6.13.0 集群规划+配置+安装+内核参数调整(应用实例分享)

1.部署环境 局域网已配置ip、ntp时间同步、yum源,服务器版本为CentOS Linux release 7.9.2009 (Core),安装文件为greenplum-db-6.13.0-rhel7-x86_64.rpm。 2.集群规划 IP 主机

额外说明

打开软件出现找不到dblist32.ocx文件的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个dblist32.ocx文件

ads via 小工具