In LaTeX the \par command gets redefined several times during a run over a document. For example, inside a tabular it does nothing: an input such as
\begin{tabular}{l}
\ttfamily\meaning\par
\end{tabular}
would print
macro:->.
(after the colon the parameter text is shown; after -> up to the period the replacement text is shown). This way, users aren't bothered with empty lines inside a tabular.
In a center, flushleft or flushright environment, the definition is more complicated, but eventually the macro \par will execute {\@@par}, where \@@par is defined in the kernel by
\let\@@par\par
at a moment when \par still has its primitive meaning. In normal situations, \par will have the primitive meaning and, in general, one should use \par in macros.
Another example: when a \parbox or minipage is started, the \@parboxrestore command is executed, which also does \let\par\@@par. Why? Because the \parbox or minipage could be in a tabular or any other place where \par has been redefined.
The kernel has an interesting set of macros:
\def\@setpar#1{\def\par{#1}\def\@par{#1}}
\def\@par{\let\par\@@par\par}
\def\@restorepar{\def\par{\@par}}
The macro \@setpar changes the meaning of \par and \@par; why making a copy of the new meaning of \par into \@par? Because one can always say \@restorepar which will restore the meaning of \par as defined with \@setpar, in cases when it's not certain that \par has the wanted meaning. The default definition of \@par is to restore the primitive meaning.
Of course, grouping plays an essential role here. For instance, \par does nothing in tabular, but as soon as \end{tabular} is executed, \par will get back the meaning it had before \begin{tabular}. So a restoration with \let\par\@@par is rarely needed; an exception is \@parboxrestore, that's intended to bring LaTeX into a fresh state as if a new document should be started (we're in a \parbox or minipage and this indeed makes sense).
Your question has probably been prompted by the line
\newenviron{solution}{}{\xappto{\temp@solnlist}{\solutionbody {\@@par}}}
in your code at Problems using listxadd and xappto
Well, this is a place where a plain \par should be used:
\newenviron{solution}
{}
{\xappto{\temp@solnlist}{\expandonce{\solutionbody}\noexpand\par}}
The \noexpand is needed because of \xappto and the fact that we want \par to be stored, not its expansion at the uncontrolled moment the \xappto command is performed.
\@@parand\@parare only copies of\par(using\let) to save the meaning of the TeX primitive\par– May 19 '15 at 06:29source2e, which describes the internals of the LaTeX Kernel. If you don't want to bother with such low-level kernel macros you can use some intermediate packages such asetoolboxetc. even in your class or package file to simplify some setups.\z@and\p@are just dimension registers,\protected@edefprevents expansion of the defined macro, making it robust and non-fragile – May 19 '15 at 06:35\paris generally bigger than the value used by\newline– May 19 '15 at 07:48\@@parhas the same meaning has\endgrafso this question is essentially the same as http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf – David Carlisle May 19 '15 at 08:21\parversus\@@par, which is a good question but can't really be covered in the same answer as say\protected@edef. – Joseph Wright May 19 '15 at 09:02